Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在MFC中用异步过程调用中断accept winsock调用_C++_Multithreading_Mfc_Winsock - Fatal编程技术网

C++ 在MFC中用异步过程调用中断accept winsock调用

C++ 在MFC中用异步过程调用中断accept winsock调用,c++,multithreading,mfc,winsock,C++,Multithreading,Mfc,Winsock,问题很简单, 我有一个守护进程线程,它等待传入的客户端连接,当至少有一个客户端连接时,它就会退出 现在,当有人调用shutdownApp函数时,我需要向守护进程线程发送信号(或中断),并要求它退出阻塞接受,以便它可以退出 我不想用 1) 选择(或非阻塞线程) 2) 终端阅读 MFC提到winsock的accept函数可以通过异步过程调用中断。如果有人有关于如何操作的指针,那就太好了。只需关闭调用accept()的套接字即可。这将导致accept()。如果您仔细阅读文档,它会提到APC可能会过早中

问题很简单,

我有一个守护进程线程,它等待传入的客户端连接,当至少有一个客户端连接时,它就会退出

现在,当有人调用shutdownApp函数时,我需要向守护进程线程发送信号(或中断),并要求它退出阻塞接受,以便它可以退出

我不想用

1) 选择(或非阻塞线程)
2) 终端阅读


MFC提到winsock的accept函数可以通过异步过程调用中断。如果有人有关于如何操作的指针,那就太好了。

只需关闭调用
accept()
的套接字即可。这将导致
accept()。如果您仔细阅读文档,它会提到APC可能会过早中止
accept()
,以警告您在APC仍在运行时不要再次调用
accept()
。这并不意味着您应该故意使用APC中止
accept()
,这是错误的解决方案

如果不想关闭套接字,请在循环中使用
select()
。它可以在阻塞和非阻塞套接字上工作,并会告诉您何时调用
accept()
,这样它就不会阻塞。指定一个超时,以便线程可以在再次调用
select()
之前定期唤醒以查找终止条件