當試圖通過連接到服務器上某個地方託管的PHP腳本嘗試登錄時,應用程序停止響應,這是預期的,但如果連接或PHP腳本的響應延遲,則等待時間太長,看起來應用程序已掛起,我們不希望用戶思考。應該在一個單獨的線程中完成C++應用程序的登錄嗎?
因此,爲了這個目的創建一個新的線程是一個好主意,並且直到收到響應時才簡單地禁用主應用程序上的控件?
我在C++和純Winapi以及libCurl和oop中工作。
當試圖通過連接到服務器上某個地方託管的PHP腳本嘗試登錄時,應用程序停止響應,這是預期的,但如果連接或PHP腳本的響應延遲,則等待時間太長,看起來應用程序已掛起,我們不希望用戶思考。應該在一個單獨的線程中完成C++應用程序的登錄嗎?
因此,爲了這個目的創建一個新的線程是一個好主意,並且直到收到響應時才簡單地禁用主應用程序上的控件?
我在C++和純Winapi以及libCurl和oop中工作。
你不應該在你的主(GUI?)線程中做(可以)時間密集型的任務。連接到服務器是這樣的。你可能會通過使用異步IO(例如回調函數或非阻塞套接字)來解決它,但這些解決方案也爲您產生了另一個線程。 在另一個線程中進行連接並在連接時禁用控件,但告訴用戶程序正在做某些事情(例如通過旋轉圓圈或其他東西)。當程序似乎什麼都不做時,用戶討厭它。
libcurl多接口能夠異步工作,所以不必使用單獨的線程,而必須調用curl_multi_perform()函數,直到獲得結果。它看起來很奇怪,但是每次你可以避免在你的應用程序中使用線程,你就會贏。線程==錯誤有一天會發生,所以如果可能的話,避免它們。這裏有一些basic example
使用線程似乎對我來說是一個合理的方法。 –
您也可以使用帶回調的異步I/O。 –
您也可以在連接上超時,如果超時過期,建議用戶在另一次嘗試。 – hetepeperfan