用MFC中的异步过程调用中断一个accept winsock调用
Interrupt a accept winsock call with Asynchronous Procedure calls in MFC
问题很简单,
我有一个守护线程,它等待传入的客户端连接,当至少一个客户端连接时,它退出。
现在,当有人调用shutdownApp函数时,我需要将信号(或中断)发送给守护线程,并要求它从阻塞接受中出来,以便它可以退出。
我不想用
1)选择(或非阻塞线程)
2) TerminateThread
MFC提到winsock的accept函数可以通过异步过程调用被中断。如果有人能告诉我怎么做,那就太好了。
只需关闭正在调用accept()
的套接字。这将导致accept()
失败,并显示一个错误代码,然后线程可以检查。如果您更仔细地阅读文档,它提到APC可以过早地中止accept()
,以警告您不要在APC仍在运行时再次调用accept()
。这并不意味着你应该故意使用APC来中止accept()
,这是错误的解决方案。
如果不想关闭套接字,则在循环中使用select()
。它可以在阻塞和非阻塞套接字上工作,并且会告诉您何时调用accept()
,因此它不会阻塞。指定一个超时,以便您的线程可以在再次调用select()
之前定期唤醒以查找终止条件。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '