Scilab cli: add a "--timeout delay" argument
[scilab.git] / scilab / modules / windows_tools / src / cpp / SignalManagement.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2016 - 2016 - Scilab Enterprises - Clement DAVID
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #include <windows.h>
17 #include <iostream>
18
19 extern "C"
20 {
21 #include <SignalManagement.h>
22 }
23
24 static void kill_process_callback(TP_CALLBACK_INSTANCE*, void*, TP_TIMER*);
25
26 void timeout_process_after(int timeoutDelay)
27 {
28     auto timerid = CreateThreadpoolTimer(kill_process_callback, nullptr, nullptr);
29
30     FILETIME FileDueTime;
31     ULARGE_INTEGER ulDueTime;
32
33     // Set the timer to fire in the delay in seconds
34     ulDueTime.QuadPart = (ULONGLONG) - (timeoutDelay * 10 * 1000 * 1000);
35     FileDueTime.dwHighDateTime = ulDueTime.HighPart;
36     FileDueTime.dwLowDateTime  = ulDueTime.LowPart;
37
38     SetThreadpoolTimer(timerid, &FileDueTime, 0, 0);
39 }
40
41 static void kill_process_callback(TP_CALLBACK_INSTANCE*, void*, TP_TIMER*)
42 {
43     std::cerr << "Watchdog timer expired: Scilab killed" << std::endl;
44     ExitProcess(1);
45 }
46