3
我編寫了一個終端應用程序,它使用由設計不佳的庫控制的設備,該庫覆蓋了SIGINT
(CTRL + C)。我的目標是使用該庫正確使用該設備,但我希望能夠通過一些清理很好地關閉我的應用程序。 (否則,我也不會跟着我連接並再次運行程序時無法再連接其他設備的協議。)庫覆蓋信號處理程序,但我需要清理CTRL + C
這裏是我的嘗試:
std::atomic<bool> globalQuit(false);
void signalHandler(int signal)
{
globalQuit = true;
}
int
main(int argc, char** argv)
{
std::signal(SIGINT, signalHandler);
badLibraryCall();
while (!globalQuit)
{
badLibraryCall();
}
doCleanUp();
return 0;
}
然而,當我打CTRL + C,在badLibraryCall
中註冊的另一個signalHandler被調用並退出。沒有好的doCleanUp
完成。
@ mike.dld,已更正。作爲解決方法,我使用了不同的信號。 – SpamBot