On 12/01/2017 04:41 PM, Wanderer wrote:
I wonder why `scope(exit)` code is not executed when the program is
terminated with Ctrl-C.
For example:
```
import std.stdio;
import core.thread;
void main()
{
scope (exit)
{
writeln("Cleanup");
}
writeln("Waiting...");
Thread.sleep(10.seconds);
writeln("Done waiting...");
}
```
If I wait 10 seconds, I get "Cleanup" output.
But if I use Ctrl-C to terminate the program before 10 seconds elapse,
there's no "Cleanup" output.
Is it intentional?
Is there any method to cleanup on Ctrl-C?
Combined your code with this solution:
http://forum.dlang.org/post/isawmurvxjyldcwdd...@forum.dlang.org
import core.thread;
import std.stdio;
import core.sys.posix.signal;
// Note: This one is thread-local; make shared or __gshared if needed
bool doQuit;
extern(C) void handler(int num) nothrow @nogc @system
{
printf("Caught signal %d\n",num);
doQuit = true;
}
void main(string[] args)
{
signal(SIGINT, &handler);
scope (exit)
{
writeln("Cleanup");
}
writeln("Waiting...");
foreach (_; 0 .. 100) {
Thread.sleep(100.msecs);
if (doQuit) {
break;
}
}
writeln("Done waiting...");
}
Ali