github.com/geraldss/go/src@v0.0.0-20210511222824-ac7d0ebfc235/runtime/testdata/testwinlibsignal/main.c (about) 1 #include <windows.h> 2 #include <stdio.h> 3 4 HANDLE waitForCtrlBreakEvent; 5 6 BOOL WINAPI CtrlHandler(DWORD fdwCtrlType) 7 { 8 switch (fdwCtrlType) 9 { 10 case CTRL_BREAK_EVENT: 11 SetEvent(waitForCtrlBreakEvent); 12 return TRUE; 13 default: 14 return FALSE; 15 } 16 } 17 18 int main(void) 19 { 20 waitForCtrlBreakEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 21 if (!waitForCtrlBreakEvent) { 22 fprintf(stderr, "ERROR: Could not create event"); 23 return 1; 24 } 25 26 if (!SetConsoleCtrlHandler(CtrlHandler, TRUE)) 27 { 28 fprintf(stderr, "ERROR: Could not set control handler"); 29 return 1; 30 } 31 32 // The library must be loaded after the SetConsoleCtrlHandler call 33 // so that the library handler registers after the main program. 34 // This way the library handler gets called first. 35 HMODULE dummyDll = LoadLibrary("dummy.dll"); 36 if (!dummyDll) { 37 fprintf(stderr, "ERROR: Could not load dummy.dll"); 38 return 1; 39 } 40 41 printf("ready\n"); 42 fflush(stdout); 43 44 if (WaitForSingleObject(waitForCtrlBreakEvent, 5000) != WAIT_OBJECT_0) { 45 fprintf(stderr, "FAILURE: No signal received"); 46 return 1; 47 } 48 49 return 0; 50 }