usleep使用

前几天分析MAC上的一段代码,偶然看到usleep这个函数,打开MSDN居然查不到这个函数,对应的在windows上,只有Sleep函数。百度了一下:

语法:

void usleep(int micro_seconds);   

返回值:

无   

内容说明:

本函数可暂时使程序停止执行。

参数

micro_seconds 为要暂停的微秒数(us)。  

注意:

这个函数不能工作在 Windows 操作系统中。参见:usleep() 与sleep()类似,用于延迟挂起进程。进程被挂起放到reday queue。

只是一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。且此函数已被废除,可使用nanosleep。如果延迟时间为几十毫秒(1ms = 1000us),或者更小,尽可能使用usleep()函数。这样才能最佳的利用CPU时间。

 

在windows下使用Sleep函数,需要包含头文件windows.h;在MAC/LINUX上使用需要包含头文件unistd.h。

注意:unistd的意思是Unix   Standard的意思,里面定义的宏一类的东西都是为了Unix标准服务的(一般来说包括了POSIX的一些常量)

可以使用如下的方式:

#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif

 

但是如果在MAC上使用QT编程,并且在QThread中使用了usleep函数,则此处的usleep函数就是QThread中的了。

Qt中,`usleep` 是一个用于微秒级延迟的函数,通常用于**阻塞当前线程**一段时间。以下是详细说明和用法示例: --- ### 1. **函数原型** `usleep` 是 POSIX 标准函数(定义在 `<unistd.h>` 中),但在 Qt 中更推荐使用跨平台的替代方案: - **C++标准库**:`std::this_thread::sleep_for`(需 `<thread>` 和 `<chrono>`) - **Qt 替代方案**:`QThread::usleep` 或 `QThread::msleep` ```cpp #include <QThread> // Qt 方式 // 或 #include <unistd.h> // POSIX usleep(仅限 Unix-like 系统) ``` --- ### 2. **Qt 中的用法示例** #### (1)使用 `QThread::usleep`(推荐) ```cpp #include <QThread> void delayMicroseconds(int microseconds) { QThread::usleep(microseconds); // 阻塞当前线程 } ``` #### (2)使用 `std::this_thread::sleep_for`(跨平台) ```cpp #include <thread> #include <chrono> void delayMicroseconds(int microseconds) { std::this_thread::sleep_for(std::chrono::microseconds(microseconds)); } ``` #### (3)直接调用 POSIX `usleep`(不推荐,缺乏跨平台性) ```cpp #include <unistd.h> void delayMicroseconds(int microseconds) { usleep(microseconds); // 仅适用于 Linux/Unix } ``` --- ### 3. **注意事项** 1. **阻塞主线程的风险** `usleep` 会阻塞当前线程,**如果在主线程(GUI线程)中调用,会导致界面冻结**。应避免在主线程中使用,或改用异步方式(如 `QTimer`)。 2. **精度问题** - 实际延迟可能因系统调度略有偏差。 - Windows 不支持 `usleep`,需用 `Sleep()`(毫秒级)或 Qt 的 `QThread::msleep`。 3. **替代方案** - 需要非阻塞延迟时,使用 `QTimer::singleShot`: ```cpp QTimer::singleShot(100, []() { qDebug() << "延迟100毫秒后执行"; }); ``` --- ### 4. **完整示例** ```cpp #include <QCoreApplication> #include <QThread> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() << "开始延迟..."; QThread::usleep(500000); // 延迟500毫秒(500,000微秒) qDebug() << "延迟结束!"; return a.exec(); } ``` --- ### 5. **常见问题** - **Q: `usleep` 和 `msleep` 的区别?** A: `usleep` 单位是微秒(1秒=1,000,000微秒),`msleep` 是毫秒(1秒=1,000毫秒)。例如,`QThread::msleep(500)` = 500毫秒延迟。 - **Q: 如何在 Qt 中实现高精度定时?** A: 使用 `QElapsedTimer` 测量时间,或结合 `QTimer` 和事件循环。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值