VC++2005替代sleep
时间: 2024-12-18 11:35:36 浏览: 11
在Visual C++ 2005中,如果你想让线程暂停一段时间而不是直接使用`Sleep`函数,可以使用`SleepEx`或者`WaitForSingleObject`方法。`SleepEx`允许你指定精确的毫秒数,并且还可以设置是否唤醒因信号事件而阻塞的线程。
例如:
```cpp
#include <windows.h>
#include <thread>
void SleepFor(int milliseconds)
{
SleepEx(milliseconds, false); // 第二个参数设为FALSE表示不会被信号中断
}
int main()
{
std::thread worker(SleepFor, 1000); // 线程将暂停1秒钟
// 主线程继续执行其他任务...
worker.join(); // 等待工作线程结束
return 0;
}
```
另外,如果你需要更高级的控制,如等待某个条件变量变为真,可以使用`WaitForSingleObject`配合条件变量(`WaitableCriticalSection`、`Event`或`Mutex`):
```cpp
HANDLE mutex = CreateMutex(NULL, FALSE, NULL); // 创建互斥量
...
// 线程A等待mutex
WaitForSingleObject(mutex, INFINITE);
// 线程B释放mutex
ReleaseMutex(mutex);
// 或者使用Event
HANDLE event = CreateEvent(NULL, TRUE, FALSE, NULL);
...
WaitForSingleObject(event, INFINITE); // 线程等待事件触发
SetEvent(event); // 触发事件后,其他等待线程会被唤醒
CloseHandle(mutex); // 或者CloseHandle(event);
```
阅读全文