|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
[C/C++] rivolto a chi conosce il multithread e borland c++ builder
ho implementato due thread nel mio progetto e ho incluso anche il componente ServerSocket.
So che i due thread vengono eseguiti in parallelo, ma non è questo il mio problema ma un altro: ho settato nel componente ServerSocket l'evento OnClientRead in quanto desidero che il server risponda quando il client invia qualche messaggio al server e mi chiedevo: la risposta a tale evento assieme all'esecuzione dei due thread come viene vista al fine dell'esecuzione dell'intero processo? Può esistere che i due thread e l'esecuzione del codice incluso nell'evento sia come eseguire tre thread oppure quando si esegue l'evento i due thread vengono messi in wait? Sarebbe meglio scrivere un terzo thread per soddisfare i messaggi dei client oppure già così com'è fatto è performante? Spero di essere stato chiaro anche se ho qualche dubbio. Ultima modifica di misterx : 31-10-2011 alle 12:41. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2011
Messaggi: 381
|
Non c'ho capito molto
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Codice:
#include <......>
int tempo[255];
void __fastcall TForm1::Button1Click(TObject *Sender)
{
produttore = CreateThread(NULL,0,ThreadProduttore,NULL,0,&ID1);
scrittore = CreateThread(NULL,0,ThreadScrittore,NULL,0,&ID2);
}
DWORD WINAPI ThreadProduttore( LPVOID lpParameter)
{
for(int pp=0; pp < 255;pp++) tempo[pp]=xx;
}
DWORD WINAPI ThreadScrittore( LPVOID lpParameter )
{
for(int pp=0; pp < 255;pp++)
Label1->Caption = tempo[pp];
}
ora aggiungo il seguente evento Codice:
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
int tmp;
String ClientRequest = Socket->ReceiveText();
if(ClientRequest.SubString(1,2) == "CA"){ /* carica un part-program sul CN */
tmp = ClientRequest.Length()-3;
CaricaPartProgram( ClientRequest.SubString(3, tmp ));
Memo1->Lines->Add("Carico programma");
}
Memo1->Lines->Add("Messaggio generico");
}
Come viene eseguito invece l'evento ServerSocket1ClientRead() ? Viene trattato come se fosse un thread oppure, quando si passa ad eseguirlo gli altri due thread vongono messi in wait sono a quando l'evento è stato soddisfatto? Quello che mi preoccupa è la perdita del parallelismo di due thread ad opera dell'evento. |
|
|
|
|
|
#4 | ||
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
Quote:
I thread che crei girano in parallelo anche al thread che gestisce la UI (che non crei tu manualmente, ma c'è). Quindi il codice dell'evento non blocca i thread. Ti bastano poche righe di codice per verificarlo tu stesso. |
||
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
due domande: cosa intendi per UI? Per verificarlo da solo intendi che sarebbe sufficiente inserire qualche contatore nei due thread e nell'evento? ciao |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
User Interface. In questo caso forse era meglio parlare di GUI, però il senso penso si capisca.
Potrebbe essere un modo, sì. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
grazie
quindi è come se avessi implementato tre thread di cui uno è gratis |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:30.




















