簡體   English   中英

使用MFC中的異步過程調用中斷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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM