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)
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;
ts.tv_sec = secs;
ts.tv_nsec = nsecs;
ts.tv_sec = secs.count();
ts.tv_nsec = frac.count();
return ts;
}
void QThread::sleep(unsigned long secs)
{
qt_nanosleep(makeTimespec(secs, 0));
qt_nanosleep(makeTimespec(std::chrono::seconds{secs}));
}
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)
{
qt_nanosleep(makeTimespec(usecs / 1000 / 1000, usecs % (1000*1000) * 1000));
qt_nanosleep(makeTimespec(std::chrono::microseconds{usecs}));
}
#if QT_CONFIG(thread)