QThread/Unix: use chrono for time arithmetic

Change-Id: I090d204db6126b3b6336637779b190509a9f0778
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Ahmad Samir 2022-10-31 01:18:26 +02:00
parent 7898de4258
commit fee46831fd

View File

@ -488,27 +488,31 @@ void QThread::yieldCurrentThread()
#endif // QT_CONFIG(thread) #endif // QT_CONFIG(thread)
static timespec makeTimespec(time_t secs, long nsecs) static timespec makeTimespec(std::chrono::nanoseconds nsecs)
{ {
using namespace std::chrono;
const seconds secs = duration_cast<seconds>(nsecs);
const nanoseconds frac = nsecs - secs;
struct timespec ts; struct timespec ts;
ts.tv_sec = secs; ts.tv_sec = secs.count();
ts.tv_nsec = nsecs; ts.tv_nsec = frac.count();
return ts; return ts;
} }
void QThread::sleep(unsigned long secs) void QThread::sleep(unsigned long secs)
{ {
qt_nanosleep(makeTimespec(secs, 0)); qt_nanosleep(makeTimespec(std::chrono::seconds{secs}));
} }
void QThread::msleep(unsigned long msecs) void QThread::msleep(unsigned long msecs)
{ {
qt_nanosleep(makeTimespec(msecs / 1000, msecs % 1000 * 1000 * 1000)); qt_nanosleep(makeTimespec(std::chrono::milliseconds{msecs}));
} }
void QThread::usleep(unsigned long usecs) void QThread::usleep(unsigned long usecs)
{ {
qt_nanosleep(makeTimespec(usecs / 1000 / 1000, usecs % (1000*1000) * 1000)); qt_nanosleep(makeTimespec(std::chrono::microseconds{usecs}));
} }
#if QT_CONFIG(thread) #if QT_CONFIG(thread)