配置 CSocket 操作的超時時間
阿新 • • 發佈:2018-12-29
摘要:
CSocket 操作,如“接收”(Receive)、“傳送”(Send) 和“連線”(Connect) 均是阻塞操作,即要等到操作成功執行完畢或套接字上出現錯誤後,對這些函式的呼叫才有返回結果。
在某些情況下,操作可能永遠不能成功完成,這將導致程式無限迴圈等待操作完成。一種解決方法是通過程式設計限制完成操作使用的時間。本文將討論這種方法。
實現方法:
這種方法是設定定時,讓它在操作時間過長時啟動。此方法的關鍵在於處理定時器的方式。雖然操作是“阻塞的”,但仍然可以處理到達的訊息。如果通過使用 SetTimer 設定定時器,那麼可以查詢 WM_TIMER 訊息,並在收到該訊息時終止操作。該過程中涉及的主要函式有:
Windows API 呼叫函式: ::SetTimer
MFC 函式: CSocket::OnMessagePending CSocket::CancelBlockingCall為簡單起見,可以在 CSocket 衍生類中封裝該功能。
手寫如下函式: