[英]signal handling strange behaviour
我只是在嘗試信號處理,所以我寫了一個程序來測試SIGINT,但是發生了一些奇怪的事情!
我的代碼是這樣的:
void signalHandle(int);
int main()
{
signal(SIGINT, signalHandle);
for (int i = 0; i < 100000; ++i)
{
cout << i <<"\r";
}
}
void signalHandle(int signalValue)
{
cout << "Interrupt signal (" << signalValue <<
") recieved . Do you wish to continue?" << endl;
int response;
cin >> response;
if (response == 0)
exit(EXIT_SUCCESS);
signal(SIGINT, signalHandle);
}
當我使用ctrl + c時,該程序實際上進入了signalHandle函數,但僅顯示消息,而忽略其余消息。 它很奇怪 。 我使用了空循環,效果很好。 另外,我用了提高函數,也很好。 我不知道為什么得到這樣奇怪的結果... ...我對這個話題有點困惑,大多數訓練只是強調提高功能。 我正在使用Windows,所以在哪里必須尋求更深入的了解? 我的書要我看一下系統手冊...
我相信您的問題與以下事實有關:您將cin
與int
一起使用,但同時為其提供了'char'。
因此,如果您用0
以外的任何值回答問題,程序將繼續執行直到循環結束。 但是,如果為它提供了無法解析為int
(例如y
,則response
將等於0,並且您的程序將exit()
。
要解決此問題,您只需要將int reponse
更改為char response
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.