Hoi Germ, RGJ,
Ik heb isdnlog-0.03.zip op mijn anonieme ftp server gezet. Het is alleen een kaal service programma.
Germ, Je hoeft deze versie niet te testen. Ik maak soms een versie waarop ik later weer verder borduur.
Je hebt m.i. eigenlijk drie threads.
-
De service thread (win_main2(int argc, char **argv)). Hierin bouw je alles op. Als conditie (ready_to_exit) waar wordt dan ga je afbouwen.
-
Een thread (handle_isdnlogd_requests)()) die de isdn capi dll gaat monitoren. Ik heb dit gesimuleerd in deze versie door om de 5 seconden een regel in c:\test.txt te zetten.
-
Mogelijk een shutdown thread (handle_shutdown)()) die zorgt dat bij shutdown het programma doorloopt en het programma geen “not reponding” status krijgt. Deze thread heb ik nog niet aangezet in de code.
Het opbouwen gaat goed. Het beëindigen werkt ook. Echter het gecontroleerd afbouwen heb ik nog niet voor elkaar. Je zal goed moeten uitzoeken hoe je alles (“ bijvoorbeeld alle threads”, control C) laat synchroniseren. Vandaag voor het eerst met threads bezig --)
Ik ga nu een isdnlog-0.04.zip maken waarin ik de fshisdnlog code er in toevoeg. Het synchronisatie m.b.t. de afbouw ga ik later oplossen.
De vriendelijke groet Jan Marco
P.S. Ik zie ook in mysqld:
static void init_signals(void)
{
signal(SIGQUIT, sig_kill);
signal(SIGKILL, sig_kill);
signal(SIGTERM, sig_kill);
signal(SIGINT, sig_kill);
signal(SIGHUP, sig_reload); // Flush everything
signal(SIGALRM, SIG_IGN);
signal(SIGBREAK,SIG_IGN);
signal_thread = pthread_self();
}
Ik denk dat ik hier ook iets mee moet. Afhankelijk van het “signaal” een andere procedure uitvoeren.