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

Reply via email to