|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: Firenze Moto: Suzuki GSR
Messaggi: 795
|
Aprire e gestire + thread in C++
Come da titolo, ho la necessità che dalla procedura main partano in parallelo + processi, in pratica tutti uguali (nel senso che chiamo la stessa procedura) ma che agiscono su variabili (e files) diversi che passerei alla procedura chiamata.
Come si fa? Al momento sto usando le librerie commonc++ (prese da surceforge) ma ho dei problemi nell'ambiente multithreading, infatti i thread si bloccano prima del dovuto, mentre se faccio partire un solo thread allora termina tranquillamente. Grazie e ciao |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Forse hai problemi con il lock di aree di memoria accedute contemporaneamente da più thread...
Non conosco le commonc++, forse dovresti provare altre librerie per vedere se la colpa è delle commonc++ o "tua" ![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2001
Città: Firenze Moto: Suzuki GSR
Messaggi: 795
|
Io lavoro in ambiente windows (sigh!) quali librerie posso usare(possibilmente che abbiano una buona documentazione!)?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Con le API di Windows hai provato ? Con CreateThread ad esempio....
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Le API di Windows sarebbero forse la soluzione migliore. Comunque le SDL ci sono anche per windows, sono state portate su molte piattaforme.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2001
Città: Firenze Moto: Suzuki GSR
Messaggi: 795
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
AfxBeginThread è la versione MFC della API CreateThread...ho trovato questo esempio...
UINT MyThreadProc( LPVOID pParam ) { CMyObject* pObject = (CMyObject*)pParam; if (pObject == NULL || !pObject->IsKindOf(RUNTIME_CLASS(CMyObject))) return 1; // if pObject is not valid // do something with 'pObject' return 0; // thread completed successfully } // inside a different function in the program . . . pNewObject = new CMyObject; AfxBeginThread(MyThreadProc, pNewObject); . . . |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per CreateThread :
DWORD WINAPI ThreadProc(LPVOID lpParameter // thread data) {   int *i = (int *)lpPrameter;   ++i;   return 0; } void tuaFunzione() {   ....   ....   ....   int i = 0;   int threadID;   HANDLE t = CreateThread(NULL, 0, ThreadProc, (void *)&i, 0, threadID);   ...   ...   ...   int termStatus;   if(GetExitCodeThread(t, termStatus))   {     //c'è stato un errore la frunzione non può essere eseguita   }   else   {     if(termStatus == STILL_ACTIVE)     {       //Il thread sta ancora girando     }     else     {       //termStatus c'è l'exitCode del thread     }   } } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:28.