Can you try this on the Git for Windows shell/bash and see if it works there?

On Thu, Dec 1, 2016 at 11:44 AM, J-Donald Tournier <jdtourn...@gmail.com> wrote:
> Hi all,
>
> I'm trying to catch signals and user interrupts in my application to perform
> some cleanup, but having trouble getting this to work on MSYS2 (up to date
> as of this morning). To get to the bottom of this, I've written this minimal
> (not) working example:
>
> --------------------------------------------------
> #include <windows.h>
> #include <wincon.h>
> #include <stdio.h>
> #include <signal.h>
> #include <unistd.h>
>
>
> // WIN32 Ctrl handler:
> BOOL WINAPI CtrlHandler (DWORD CtrlType)
> {
>   if (CtrlType == CTRL_C_EVENT) {
>     fprintf (stderr, "caught Ctrl-C (via CtrlHandler)\n");
>     exit(0);
>   }
>   fprintf (stderr, "caught something else (via CtrlHandler)\n");
>   return true;
> }
>
> // POSIX signal handler:
> void signal_handler (int sig)
> {
>   if (sig == SIGINT) {
>     fprintf (stderr, "caught Ctrl-C (via signal_handler)\n");
>     exit (0);
>   }
>   fprintf (stderr, "caught something else (via signal_handler)\n");
>   exit (0);
> }
>
>
> int main (int argc, char* argv[])
> {
>   // avoid buffering on stderr:
>   setvbuf(stderr, NULL, _IONBF, 0);
>
>   // set Windows Ctrl handler:
>   SetConsoleCtrlHandler (CtrlHandler, true);
>
>   // set POSIX signal handler:
>   signal (SIGINT, signal_handler);
>
>
>   /* the following does not compile:
>
>   // set signal handler via sigaction():
>   struct sigaction act;
>   act.sa_handler = &signal_handler;
>   sigfillset (&act.sa_mask);
>   act.sa_flags = 0;
>   sigaction (SIGINT, &act, NULL);
>
>   */
>
>   // twiddle your thumbs until the user presses Ctrl-C:
>   while (1) {
>     fprintf (stderr, "- tick -\n");
>     sleep (1);
>   }
>
>   return 0;
> }
> --------------------------------------------------
>
> which I compile and run with:
>
> --------------------------------------------------
> $ gcc catch_ctrl-c.cpp -o catch_ctrl-c && ./catch_ctrl-c.exe
> - tick -
> - tick -
>
> $
> --------------------------------------------------
>
> In the above, I hit Ctrl-C after the second tick, but neither handler was
> invoked. You'll also note I tried the sigaction() version too (what we use
> on Linux, as recommended on the manpage), but if I uncomment this section,
> it fails to compile on MSYS2, with the following error:
> --------------------------------------------------
> catch_ctrl-c.cpp: In function 'int main(int, char**)':
> catch_ctrl-c.cpp:46:20: error: aggregate 'main(int, char**)::sigaction act'
> has incomplete type and cannot be defined
>    struct sigaction act;
>                     ^~~
> catch_ctrl-c.cpp:48:27: error: 'sigfillset' was not declared in this scope
>    sigfillset (&act.sa_mask);
>                            ^
> catch_ctrl-c.cpp:50:32: error: invalid use of incomplete type 'struct
> main(int, char**)::sigaction'
>    sigaction (SIGINT, &act, NULL);
>                                 ^
> catch_ctrl-c.cpp:46:10: note: forward declaration of 'struct main(int,
> char**)::sigaction'
>    struct sigaction act;
>           ^~~~~~~~~
> --------------------------------------------------
>
> Also tested with clang, same result. Does anyone know how to get this to
> work in MSYS2?
>
> Thanks!
> Donald.
>
> --
> Dr J-Donald Tournier (PhD)
>
> Senior Lecturer, Biomedical Engineering
> Division of Imaging Sciences & Biomedical Engineering
> King's College London
>
> A: Department of Perinatal Imaging & Health, 1st Floor South Wing, St
> Thomas' Hospital, London. SE1 7EH
> T: +44 (0)20 7188 7118 ext 53613
> W:
> http://www.kcl.ac.uk/medicine/research/divisions/imaging/departments/biomedengineering
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> Msys2-users mailing list
> Msys2-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/msys2-users
>

------------------------------------------------------------------------------
_______________________________________________
Msys2-users mailing list
Msys2-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/msys2-users

Reply via email to