[Development] <chrono> first (was: Re: C++20 @ Qt)
Thiago Macieira
thiago.macieira at intel.com
Mon Jan 23 23:57:42 CET 2023
On Monday, 23 January 2023 05:06:13 PST Marc Mutz via Development wrote:
> Instead of changing to qint64 timeouts, as suggested, we should use
> chrono types. Here's why:
>
> - we do have QDeadlineTimer, which implicitly converts from chrono
> types, but
> - it has a Forever state, which is meaningful for timeouts, but not
> for intervals (QTimer with Forever interval?).
In other words, use the std::chrono::duration types but not the
std::chrono::time_point types.
> - if we take qint64, then internally have to construct a chrono type
> from it, it means Qt code is responsible for checking for overflow
> (chrono::milliseconds need not support the full 64-bit range),
> creating an artificial error state that wouldn't exist if we only
> accepted chrono types.
Add to qglobal.cpp:
static_assert(sizeof(std::chrono::milliseconds::rep) == 8);
We should do this anyway.
> So, chrono types are
> - more future-proof
> - safer (both as in less possible errors in the implementation, as well
> as more type-safe in the caller)
> - self-explanatory (w.r.t. granularity)
> - more expressive
Agreed.
> So, I suggest to port all duration-related APIs to <chrono>, and make
> <chrono> the primary implementation, not vice versa. In any case, ndo ot
> add 64-bit timeouts (ns granularity like QDeeadlineTimer is ok, because
> std::chrono::nanoseconds has at least a 64-bit representation). Do not
> add new integer-based duration properties. Use QDeadlineTimer if
> 'Forever' is a valid value (e.g. timeouts).
Agreed.
Thanks for bringing this up in the mailing list.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Cloud Software Architect - Intel DCAI Cloud Engineering
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5167 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/development/attachments/20230123/59ce7f7c/attachment-0001.bin>
More information about the Development
mailing list