- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的简单代码并没有像我预期的那样运行。它创建一个线程(挂起),启动它,等待它运行 1 毫秒并循环等待直到线程死亡或失败。
我希望输出是这样的:
Start
Callback running
Callback running
Callback running
WaitForSingleObject looping
Callback running
Callback running
WaitForSingleObject looping
Callback running
Callback running
WaitForSingleObject looping
Callback running
Callback running
... repeating for 10000 times
End
Thread end
但是输出是:
Start
Callback running
Callback running
Callback running
Callback running
Callback running
... repeating for 10000 times
Callback running
End
WaitForSingleObject looping
Thread end
我以为 WaitForSingleObject
中的等待会在某个时刻超时并在某个时刻中断线程?但是线程好像是阻塞的,不是异步的?
DWORD WINAPI callback(LPVOID param)
{
printf("Start\n");
for (int i=10000; i>0; i--)
printf("Callback running\n");
printf("End\n");
return 1;
}
int main()
{
HANDLE hThread = CreateThread(NULL, 0, callback, 0, CREATE_SUSPENDED, 0);
if (!hThread) {
printf("Failed to create thread\n");
return 0;
}
ResumeThread(hThread);
while (WaitForSingleObject(hThread, 1) == WAIT_TIMEOUT) {
printf("WaitForSingleObject looping\n");
}
CloseHandle(hThread);
printf("Thread end\n");
system("PAUSE");
return 0;
}
最佳答案
WaitForSingleObject
中的dwMilliseconds
参数不能依赖于准确计时。唯一的约定是,经过那么多时间后,线程将最终 唤醒并返回TIMEOUT
值。线程可能要等到它的下一个计划量程才会唤醒,该量程可能高达 60 毫秒(在 Windows Server 上甚至更高)。这足以让第二个线程完成。尝试增加迭代计数,使工作线程至少需要一秒钟的时间来运行 - 这应该有足够的时间来安排主线程并至少再运行一次 TIMEOUT
循环的迭代。
关于c++ - WaitForSingleObject 不会超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35716060/
这个问题已经有答案了: Why those two different behaviors with WaitForSingleObject function in CPP (2 个回答) 已关闭 5
今天我了解到我可以调用CreateIoCompletionPort(),然后将返回的HANDLE传递给WaitForSingleObject(): #include int main() {
今天我了解到我可以调用CreateIoCompletionPort(),然后将返回的HANDLE传递给WaitForSingleObject(): #include int main() {
我正在尝试唤醒我的电脑以防它进入休眠模式。我在某个网站上找到了这个代码片段,但我在最后添加的 Messagebox 总是立即返回。 我还在我的系统中启用了电源选项中的唤醒定时器。 [DllImport
我有两个功能: Fl_Thread n_create_thread(Fl_Thread &t, void *(*f) (void *), void *p) { return t = (Fl_T
下面的简单代码并没有像我预期的那样运行。它创建一个线程(挂起),启动它,等待它运行 1 毫秒并循环等待直到线程死亡或失败。 我希望输出是这样的: Start Callback running Call
我阅读了有关使用 WaitForSingleObject() 的不同主题,但我仍然不明白为什么我不能让它工作。我有一个使用 AfxBeginThread 更新的进度条,我想在执行另一个进程之前等待完成
h=CreateFile("c:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY|FI
在 WinAPI 下有 WaitForSingleObject() 和 ReleaseMutex() 函数对。还有 Interlocked*() 函数族。我决定检查捕获单个互斥锁和交换互锁变量之间的性
我做 WaitForSingleObject(handle, timeout);如果在调用 WaitForSingleObject 之前 handle 已经发出信号,函数将返回什么? 我认为它应该立即
我正在使用 waitForAll 参数 = true 的 WaitForMultipleObject 函数。这里使用一个 std::vector 的 handle 对象来等待。如果这个函数超时了,那么
一些背景如果你感兴趣,否则你可以直接转到底部的问题: 我遇到了一个问题,我有一个无限的 while 循环,其中有两个 if 条件检查两个事件对象状态是否变为有信号。 while(1) { if
下面是一段代码。代码不完整,我省略了释放资源部分和QueryRes逻辑的实现。 #define N 5 /*simply resources manager which has N shared re
过去几天我一直在尝试为一个应用程序寻找一个好的架构,经过一些研究我终于卡住了,原因是 COM。 有问题的应用程序将有多个 GUI 线程,它们将为工作线程安排工作项。工作线程将通过 CoInitiali
我正在用 C 编写一个 win32 程序。 当您有多个线程在运行,并且其中一个线程正在等待一个事件(例如使用 WaitForSingleObject())时,该线程是否仍然获得其完整的 CPU 时间片
如果我设置 3 个线程等待释放互斥锁,它们是根据请求的顺序形成一个队列,还是未定义的行为(即我们不知道哪个会先接收它) ? 最佳答案 它在 SDK article 中明确记录: If more tha
在等待超时时间为零的事件时,WaitForSingleObject(或WaitForMultipleObjects)会导致上下文切换吗? (据我所知,Sleep(0) 将立即产生一个线程时间片。) 现
为了尝试如何使用 Win32 API 进行编程,我编写了一个创建进程的程序。然后我想检查我的进程是否等待新创建的进程,关闭句柄然后再次检查 WaitForSingleObject(第二个进程休眠 70
当您在使用 CreateFile() 或 _get_osfhandle() 创建的句柄上调用 WaitForSingleObject() 时会发生什么? 出于不值得解释的原因,我想使用 WaitFor
先仔细阅读问题。 有一个从 CTest 类的 CreateInstance 生成的工作线程。这是该类的原型(prototype)。 hThread 是线程句柄,hEventShutdown 是程序退出
我是一名优秀的程序员,十分优秀!