Buenas..
Tengo un problema con unos threads que acceden a una misma función. He intentado protegerlos con mutex, lo que no sé si lo hago bién. Mi planteamiento es el siguiente:
En un Form1 tengo la función y creo el mutex con
SemMutex1 = CreateMutex(NULL, false, "ReadDirectSem"); en el header declaro
HANDLE SemMutex1; "como private".
En un Form2 tengo los threads, encargados de pintar una grafica en diferentes series. Declaro el HANDLE de la misma forma. En el thread tengo el siguiente código:
__fastcall WriteMeasure1::WriteMeasure1(bool CreateSuspended)
: TThread(CreateSuspended){
SemMutex1 = OpenMutex(NULL, false, "ReadDirectSem");
Cond = true;
}
void __fastcall WriteMeasure1::Execute(void){
do{
Synchronize(&UpdateLabel1);
Sleep(500);
}while(Cond == true);
}
void __fastcall WriteMeasure1::UpdateOutput(void){
WaitForSingleObject(SemMutex1, INFINITE); //mi función del Form1
//aquí la funcíón me retorna los valores que imprimo en el grafico....
ReleaseMutex(SemMutex1); if(condiciones de salida) Cond = false;
}
Tengo tres threads que acceden a la misma función. El problema es el siguiente: A los 30 segundos de funcionar, los valores que se pintan en la grafica se mezclan, es decir, que en la Serie1 (thread1) se me pintan los valores que me retorna el Thread2, etc. entre ellos se intercanvian estos valores......
Es correcto el código, cómo puedo comprovar si el thread toma el HANDLE del mutex?? He visto algún ejemplo dónde se emplea un switch - case, pero es necesario??
Espero que alguien me pueda echar un cable.....gracias...