[英]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.