使用MFC中的异步过程调用中断accept winsock调用

问题描述 投票:0回答:1

问题很简单,

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

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

我不想用

1)选择(或非阻塞线程) 2)TerminateThread

MFC提到可以通过异步过程调用中断winsock的accept函数。如果有人指出如何做到这一点,那就太棒了。

c++ multithreading mfc winsock
1个回答
3
投票

只需关闭正在调用accept()的套接字即可。这将导致accept()失败,并返回一个错误代码,然后线程可以检查该错误代码。如果你仔细阅读文档,它会提到APC可以过早地中止accept(),以警告你在APC仍在运行时再次调用accept()。这并不意味着你应该故意使用APC来中止accept(),这是错误的解决方案。

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

© www.soinside.com 2019 - 2024. All rights reserved.