我有一個應用程序與某些硬件進行一些套接字通信。 假設對於特定的硬件,我有一個對象,並且這個對象啓動一個線程,該線程監聽特定的端口號5001,直到連接建立。刪除對象時刪除線程
現在,如果我刪除這個obect有無論如何,我可以確保無限的監聽端口號5001的線程也被破壞。
所以問題是每當一個新的對象爲同一個設備創建舊線程不會被破壞,因此有線程泄漏。
我有一個應用程序與某些硬件進行一些套接字通信。 假設對於特定的硬件,我有一個對象,並且這個對象啓動一個線程,該線程監聽特定的端口號5001,直到連接建立。刪除對象時刪除線程
現在,如果我刪除這個obect有無論如何,我可以確保無限的監聽端口號5001的線程也被破壞。
所以問題是每當一個新的對象爲同一個設備創建舊線程不會被破壞,因此有線程泄漏。
在Windows中,您可以使用WaitForSingleObject函數來檢查線程是否退出(您可以將線程的句柄作爲參數傳遞)。你可能想創建一個事件來啓動線程的退出。
在這種情況下,您需要使用非阻塞套接字。在阻塞套接字的情況下,Accept()調用塊直到有連接。 您可以使用ioctlsocket使套接字非阻塞,並從Accept()調用中檢查錯誤代碼WSAEWOULDBLOCK。 然後修改你的無限循環來使用WaitForSingleObject。
更多信息here
它也許值得設置變量的說,線程循環應該退出,然後一些數據發送到插座。這將導致套接字接收數據,喚醒,發現其退出和退出的時間。
它是平臺特定的,你使用什麼操作系統? – 2010-05-13 04:41:50
Windows和winsock – ckv 2010-05-13 04:43:21