簡體   English   中英

信號處理奇怪的行為

[英]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,所以在哪里必須尋求更深入的了解? 我的書要我看一下系統手冊...

我相信您的問題與以下事實有關:您將cinint一起使用,但同時為其提供了'char'。

因此,如果您用0以外的任何值回答問題,程序將繼續執行直到循環結束。 但是,如果為它提供了無法解析為int (例如y ,則response將等於0,並且您的程序將exit()

要解決此問題,您只需要將int reponse更改為char response

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM