除非在创建线程后立即使用,否则 QueueUserAPC 不起作用
QueueUserAPC not working unless used immediately after thread creation?
我在使用 API 函数时遇到一些困难 QueueUserAPC
.基本上,我创建了一个新线程,该线程仅在我创建的Event
对象上使用WaitForSingleObject
循环。我希望这个线程是一个"孤独"的工作线程,我可以将随机函数调用分配给我需要异步处理的线程。
但是,当我创建线程时,QueueUserAPC
唯一可以工作的时间是在创建线程后直接工作。如果我在CreateThread
之后插入 Sleep(2000);
,然后将 QueueUserAPC
放在 Sleep 之后,它将不会执行该函数,即使如果我在 Sleep
之前(立即)执行此操作,它也会起作用。
线程使用不同的句柄,我尝试重置事件对象,在它不起作用时检查返回值 QueueUserAPC
(它等于 1,MSDN 说非零结果是成功操作)。
我不太知道该怎么办。任何建议将不胜感激。
谢谢!
J.R.
使用 WaitForSingleObjectEx()。 除非使用其中一个"Ex"可警报等待调用,否则 APC 不会由线程取消排队和运行。 如果等待返回WAIT_IO_COMPLETION - 线程已执行 APC。 通常,使用某种循环来忽略该完成:
while(WAIT_IO_COMPLETION==WaitForSingleObjectEx(waithandle, INFINITE,true));
// do signalled stuff
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- 初始化矢量的大小,否则附加不起作用,为什么
- 如果-否则语句不起作用
- 除非在创建线程后立即使用,否则 QueueUserAPC 不起作用