[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