Go to file
Marc Mutz e80faf3db6 QTimer: don't circumvent <chrono> safety net
By templating on the <chrono> types and unconditionally using
duration_cast to coerce the duration into a milliseconds, we
violate a principal design rule of <chrono>, namely that non-
narrowing conversions are implicit, but narrowing conversions
need duration_cast. By accepting any duration, we allow non-
sensical code such as

   QTimer::singleShot(10us, ...)

to compile, which is misleading, since it's actually a zero-
timeout timer.

Overloading a non-template with a template also has adverse
effects: it breaks qOverload().

Fix by replacing the function templates with functions that
just take std::chrono::milliseconds. This way, benign code
such as

    QTimer::singleShot(10s, ...)
    QTimer::singleShot(10min, ...)
    QTimer::singleShot(1h, ...)

work as expected, but attempts to use sub-millisecond
resolution fails to compile / needs an explicit user-
provided duration_cast.

To allow future extension to more precise timers, forcibly
inline the functions, so they don't partake in the ABI of the
class and we can later support sub-millisecond resolution by
simply taking micro- or nano- instead of milliseconds.

Change-Id: I12c9a98bdabefcd8ec18a9eb09f87ad908d889de
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-10-18 16:06:28 +00:00
bin don't include injected headers into linker version script 2016-10-14 09:00:29 +00:00
config.tests Migrate libinput support away from QT_LIBRARY_VERSION 2016-10-10 16:59:26 +00:00
dist Merge remote-tracking branch 'origin/5.6' into 5.7 2016-09-28 11:51:35 +02:00
doc Change confusing Q_DEAD_CODE_FROM_QT4_FOO define 2016-10-14 08:19:29 +00:00
examples remove bogus qtConfig(simulator_and_device) condition 2016-10-16 00:12:33 +00:00
lib Purge all fonts 2015-08-18 19:59:14 +00:00
mkspecs slightly improve logging of library probing 2016-10-18 05:59:19 +00:00
qmake Clean up building of bootstrap lib and tools 2016-10-11 06:04:54 +00:00
src QTimer: don't circumvent <chrono> safety net 2016-10-18 16:06:28 +00:00
tests QTimer: don't circumvent <chrono> safety net 2016-10-18 16:06:28 +00:00
tools Clean up building of bootstrap lib and tools 2016-10-11 06:04:54 +00:00
util Handle indirect sibling selector 2016-07-27 20:18:02 +00:00
.gitattributes Update the git-archive export options 2012-09-07 15:39:31 +02:00
.gitignore rename configure.exe => configureapp.exe 2016-10-04 08:25:08 +00:00
.qmake.conf Bump version 2016-07-28 13:50:04 +02:00
.tag Update the git-archive export options 2012-09-07 15:39:31 +02:00
config_help.txt make command line parsing more compliant with configure script 2016-10-04 08:26:39 +00:00
configure Convert the old feature system 2016-09-15 08:24:10 +00:00
configure.bat rename configure.exe => configureapp.exe 2016-10-04 08:25:08 +00:00
configure.json Convert the old feature system 2016-09-15 08:24:10 +00:00
configure.pri Convert the old feature system 2016-09-15 08:24:10 +00:00
header.BSD Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.BSD-OLD Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.COMM Add header template for commercial only modules 2015-10-19 10:37:18 +00:00
header.FDL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.FDL-OLD Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.GPL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.GPL-EXCEPT Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL3 Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL3-COMM Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL21 Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL-NOGPL2 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL-ONLY Update copyright headers 2015-02-11 06:49:51 +00:00
INSTALL Doc: Update links in INSTALL file 2015-02-16 09:06:41 +00:00
LGPL_EXCEPTION.txt Update copyright headers 2015-02-11 06:49:51 +00:00
LICENSE.FDL Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
LICENSE.GPL2 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3-EXCEPT Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPLv3 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.LGPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.LGPLv3 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.LGPLv21 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.PREVIEW.COMMERCIAL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
qtbase.pro Merge remote-tracking branch 'origin/5.7' into 5.8 2016-10-06 20:12:27 +02:00
sync.profile create modularized version of qtplatformsupport module 2016-10-15 18:45:33 +00:00