Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Mutex
Forum - C/C++ - Mutex - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:10
Giovedì, 25/03/2010
funziona su qualunque thread, senza distinzione ;)

PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 17:50
Giovedì, 25/03/2010
Boh, è assurdo... Perchè lì la wait non funziona e invece con l'event scritto alla stessa maniera (cambia sola la release) non funziona? Dipenderà dal compilatore (io uso mingw)?

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:55
Giovedì, 25/03/2010
event e mutex sono diversi.
Un mutex blocca tutte le wait successive alla prima, e una release sblocca una sola delle wait.
Un event blocca tutte le wait a prescindere, e una singola release sblocca TUTTE le wait.

PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 17:57
Giovedì, 25/03/2010
No... Mi sono sbagliato, non funziona neanche con l'event... Che tristezza :d

Ultima modifica effettuata da robrock80 il 25/03/2010 alle 18:03
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:08
Giovedì, 25/03/2010
ancora non ho capito perchè vuoi bloccare il thread padre...

i mutex servono a proteggere le risorse condivise, non a bloccare i thread in modo arbitrario.

PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 21:52
Giovedì, 25/03/2010
Eurekaaaaa... Ci sono riuscito!!! Per questo tipo di problema serviva un event e comunque c'era un problema quando lanciavo la funzione di rilascio: praticamente anzichè deferenziare il puntatore gli passavo il puntatore stesso
Codice sorgente - presumibilmente C#

  1. void sendAsynchronousMessage(TCHAR title[], TCHAR text[], int type) {
  2.         int sendMess(Params*);
  3.         DWORD dwThreadId;
  4.         HANDLE event = CreateEvent(NULL, TRUE, FALSE, NULL);
  5.         Params params = {{(TCHAR*)title,(TCHAR*)text, &type, &event}};
  6.         CreateThread(
  7.                                         NULL,                                           0,             
  8.                                         (LPTHREAD_START_ROUTINE)&sendMess,
  9.                                         ¶ms,
  10.                                         0,             
  11.                                         &dwThreadId);
  12.         WaitForSingleObject(event, INFINITE);
  13. }
  14.  
  15.  
  16. int sendMess(Params *params) {
  17.         HANDLE* event = (HANDLE*)params->param[3];
  18.         TCHAR* title = (TCHAR*)malloc(sizeof(TCHAR) * _tcslen((TCHAR*)params->param[0]));
  19.         _tcscpy(title,(TCHAR*)params->param[0]);
  20.         TCHAR* message = (TCHAR*)malloc(sizeof(TCHAR) * _tcslen((TCHAR*)params->param[1]));
  21.         _tcscpy(message,(TCHAR*)params->param[1]);
  22.         int ico = *(int*)params->param[2];
  23.         if (event != 0) {
  24.                 PulseEvent(*event);
  25.         }
  26.         int res = MessageBox( NULL, message, title, ico);
  27.         free(title);
  28.         free(message);
  29.         return res;
  30. }


Ultima modifica effettuata da robrock80 il 25/03/2010 alle 22:08
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 23:52
Giovedì, 25/03/2010
:D non mi ero accorto dell'errore sul puntatore!

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo