[gl-como] Fork class in c++

Riccardo Penco r.penco@scasinet.com
Mar 16 Gen 2007 14:43:27 CET


Pietro Montorfano ha scritto:
> On 1/16/07, Riccardo Penco <r.penco@scasinet.com> wrote:
>> una domanda, ma tu per killare intendi da console digitare:
>>
>> kill $PID
> no intendo da programma Child.Stop() per esempio e dentro Stop c'
> qualcosa tipo kill(ChildPid, SIGTERM);
> Ovvero, si intendo proprio killare, cosi in maniera garbata,
> altrimenti kill(ChildPid, SIGKILL);
> (tratto da man 2 kill).
> Hai metodi migliori? (Io sono ai principi di programmazione multi
> thread o multiprocesso, agli inizi di programmazione seria in linux,
> so come funziona e altre cose, ma mai provato a programmare
> seriamente).
>>
>> [...]
>>
>> ciao
>> riki
> Ciau!!

ho fatto solo un programmino multithreaded e quindi la mia esperienza e' 
limitata (inoltre era c, non c++).
Si puo' terminare un thread, solo che non devi utilizzare kill ma 
pthread_cancel (man pthread_cancel) e la funzione che viene chiamata con 
pthread_create (man pthread_create) deve contenere al suo interno la 
chiamata a pthread_set_cancelstate(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);


faccio un piccolo esempio, che sicuramente chiarira' molto meglio.


void funzione_thread(void)
{
   /* dichiarazioni variabili locali etc */

   /* faccio in modo che il thread possa essere annullato */
   pthread_setcancelstate(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);

   /* resto della funzione */
}

int main(void) {
   pthread_t id; // contiene l'identificatore del thread

   /* vario codice di main */

   /* creo il thread che eseguira' la funzione 'funzione_thread' */
   pthread_create(&id, NULL, (void *) funzione_thread, NULL)

   /* altro codice di main */


   if (devo_terminare_il_thread) {
     /* termino il thread relativo alla funzione 'funzione_thread' */
     pthread_cancel(id);
   } else {
     /* aspetto che la funzione termini da sola */
     pthread_join(id, NULL);
   }

   /* altro codice */
}

Mi ricordo che a suo tempo avevo trovato con google un sacco di 
info/mini-guide alla programmazione multithreaded.

ciao


Maggiori informazioni sulla lista gl-como