写Linux应用时用到睡眠函数,比如sleep,usleep,但是将应用移植到Windows系统却是编译错误。本文解决Linux与Windows睡眠函数的兼容性问题。
1.宏替换实现
- 使用Qt的Q_OS_WIN32宏识别系统,读者可以改用其他宏来识别系统。
- Windows系统的Sleep睡眠函数单位是毫秒。
- Linux系统的sleep睡眠函数单位是秒。
- 使用宏扩展出msleep睡眠函数单位是毫秒。
1
2
3
4
5
6
7
8
9
10
2.关于Windows下的usleep
- 在Windows系统下使用微秒睡眠,实际用处不大,一般API调用都几微秒了。
- 有好过没有,万一有一天可能会用到。
1
2
3
4
5
6
7
8
9
10
11static void usleep(unsigned long usec)
{
HANDLE timer;
LARGE_INTEGER interval;
interval.QuadPart = -(10 * usec);
timer = CreateWaitableTimer(NULL, TRUE, NULL);
SetWaitableTimer(timer, &interval, 0, NULL, NULL, 0);
WaitForSingleObject(timer, INFINITE);
CloseHandle(timer);
}
3.兼容实现
1 |
|