我正在使用c++
測量軟件,它使用a 3rd party API作爲所有傳感器連接的接口。這個API不是開源的,沒有調試庫可用。凍結第三方庫中的應用程序
在某些情況下,當開始從接口讀取值時,軟件會凍結。雖然我無法確定哪些標準會導致問題,爲什麼它只是有時會發生,我想攔截凍結並實施一些錯誤處理,這也可以讓我更好地調試問題。
在我的代碼,我只是有一個電話
BOOL result = false;
result = pciadioAIStartConversion(board_index, channel_nr, range);
的地方,如果發生錯誤,pciadioAIStartConversion
永遠不會返回。我正在尋找一些簡單的功能來保持軟件運行,並在通話時間很長時返回。
我使用Qt
框架(4.8.6),所以一個可能的解決辦法是使用事件系統和QTimer
,但因此,如果我沒有記錯的通話將需要它自己的線程和這似乎是矯枉過正我。
我不認爲有什麼辦法可以實現超時,而不是產生一個單獨的線程。 – piezol
您可以創建一個單獨的'QProcess'來完成第三方庫的調用,並使用'QLocalSocket'或'std :: cin/std :: cout'進行通信。如果你沒有得到迴應,你可以安全地殺死進程。它比終止線程更安全。 –
如果您的外部軟件組件凍結,它可能仍然保留資源,即使它會被殺死。也許外部設備處於未定義狀態,只需重新啓動線程將無濟於事。根據我的經驗,依靠破碎的庫不是一個好主意。重啓軟件的解決方法聽起來很糟糕。 – Klaus