PDA

Visualizza la versione completa : [C++] Multithread


franzxx
06-12-2005, 14:01
Ciao a tutti, devo scrivere un codice C++ (sarà il processo A) che faccia questo:

1) sta in ascolto su una porta socket locale xxx (comunica con altri processi..)

2) quando riceve una richiesta sulla porta xxx deve avviare un thread che si prenda carico del compito da svolgere, lo faccia e, quando finito, invii un dato ad un altro processo B su una porta locale yyy.

Il mio problema è questo: devo prevedere un pool di threads? dato che il main può accettare più richieste contemporanee dovrà poter avviare più thread serventi contemporanei, i quali una volta finito il loro compito cesseranno la propria esecuzione. Come si fa questo in C++?
Riporto un semplice codice per singolo thread:

#include <pthread.h>

void *faiqualcosa( void *ptr );

main()
{
pthread_t thread1;
int iret1;
while (true){
//sta in ascolto su porta xxx da cui riceve 'message'
//quando arriva una richiesta avvio il thread........

iret1 = pthread_create( &thread1, NULL, faiqualcosa,(void*) message);
exit(0);
}



void *faiqualcosa( void *ptr )
{
//codice per inviare dati via socket su porta yyy
}




Secondo voi questo codice funziona?
Se ad es arriva la richiesta1, viene creato il primo thread, e prima che il thread abbia finito arrivi la richiesta2 vado a istanziare un nuovo thread sulla variabile iret1 .....Secondo voi come si fà insomma????????

Grazie a tutti.
ciao da franzxx

oregon
06-12-2005, 14:05
Va piu' o meno bene ma l'istruzione

exit(0)

non devi inserirla perche' chiuderebbe il main ...

In piu', non devi usare una variabile semplice (thread1) ma un array se vuoi gestire piu' thread ...

franzxx
06-12-2005, 15:17
Grazie, a parte l'exit cosa intendi di preciso per array? anch'io avevo in mente qualcosa del genere, mi potresti scrivere due righe di codice sulla base del mio per farmi capire?
Grazie.

franzxx
06-12-2005, 16:37
Metto qui anche un'altra domandina a riguardo.
Se mi faccio un eseguibile in C++, e voglio che esso venga lanciato da un programma java (che rappresenta il main del programma) come faccio sotto linux?
Vorrei poter dire da Java :
./eseguibilecpp

come si fa?

Loading