0
在Windows控制檯應用程序,可以趕上通過採用擠壓ctrl+c
:Windows控制檯應用程序 - 用於關閉事件信號
#include <stdio.h>
#include <signal.h>
void SigInt_Handler(int n_signal)
{
printf("interrupted\n");
}
int main(int n_arg_num, const char **p_arg_list)
{
signal(SIGINT, &SigInt_Handler);
getchar(); // wait for user intervention
}
這種運作良好,但它不一樣,如果用戶按下十字在所有工作關閉控制檯窗口的×
。有沒有什麼信號呢?
我需要這個的原因是我有這個CUDA應用程序,如果在計算某些東西時關閉,它往往會使計算機崩潰。該代碼是一種多平臺,所以我寧願使用信號而不是SetConsoleCtrlHandler
。有沒有辦法?
是不是這樣,儘管如此,你不能在這一點放棄退出?看起來現在要阻止控制檯在處理程序內部退出。 – 2017-01-18 12:59:40
你可以永遠等待,我猜測,在這之後會彈出一個「強制關閉」對話框。但由於沒有返回值,我猜你不能放棄。我只是想要一種方法來延遲退出並正確關閉應用程序。 – 2017-01-27 15:31:04
@theswine,在Vista和後來沒有對話框。如果控制處理程序返回「TRUE」或需要超過5秒的時間才返回,則Windows(csrss.exe)會強制終止該進程。如果處理程序返回'FALSE',則默認處理程序調用'ExitProcess'。在這些情況下,進程退出代碼是「STATUS_CONTROL_C_EXIT」(0xC000013A)。 – eryksun 2017-09-06 17:23:42