Hallo zusammen,
ich habe 3 Threads, die parallel laufen sollen.
Also in den receive_thread kommt er rein, Releasemutex wird angeblich auchgemacht, bloss in dem update_thread wird aus dem blockierenden Zustand nicht rausgegangen.
Habt ihr eine Idee woran es liegt?
Grüße July
ich habe 3 Threads, die parallel laufen sollen.
C++:
DWORD WINAPI receive_thread(LPVOID attr);
DWORD WINAPI update(LPVOID attr);
HANDLE mutex, anzmutex;
HANDLE events[2];
int main(){
...
HANDLE h, hanz;
static HANDLE stdinHandle;
mutex = CreateMutex(NULL,FALSE , NULL); // steht frei
anzmutex = CreateMutex(NULL, TRUE, NULL); // ist geblockt
stdinHandle = GetStdHandle(STD_INPUT_HANDLE); //handle für die Eingabe
events[0] = anzmutex;
events[1] = stdinHandle;
...
hanz = CreateThread(NULL, 0, update, (LPVOID) &aAttr, 0, NULL);
//Aufbau der Connection mit winsock
while(1)
{
//wenn neue Connection kommt
h = CreateThread(NULL, 0, receive_thread, (LPVOID) &attr,
0, NULL);
...
}
return 0;
}
DWORD WINAPI receive_thread(LPVOID attr)
{....
if (WaitForSingleObject(mutex, INFINITE) == WAIT_OBJECT_0)
{
msgid = pmap->addMessage(msg.meldung); //Schreibvorgang muss geschützt werden
ReleaseMutex(mutex);
}
...
ReleaseMutex(anzmutex); //genau diese Zeile geht iwie nicht;
return (0);
}
DWORD WINAPI update(LPVOID attr)
{
DWORD changeEvent;
....
while(1)
{
//macht eine Ausgabe von dem aktuellen Zustand des Meldungsspeichers mit printf's
if(meldungscounter>0){
changeEvent = WaitForMultipleObjects(2, events, FALSE, INFINITE);
switch (changeEvent)
{
case WAIT_OBJECT_0 + 0: //es wurde eine neue Meldung eingetragen
{
break;
}
case WAIT_OBJECT_0 + 1: //es gab eine Konsoleneingabe
{
cin >> eingabe;
if (eingabe > 0 && eingabe <= 7)
{
choice = eingabe;
}
break;
}
}
}
else
{
WaitForSingleObject(anzmutex, INFINITE); //funktionniert nicht, bzw kommt hier nie raus
choice = 0;
}
...
}
}
Also in den receive_thread kommt er rein, Releasemutex wird angeblich auchgemacht, bloss in dem update_thread wird aus dem blockierenden Zustand nicht rausgegangen.
Habt ihr eine Idee woran es liegt?
Grüße July
Zuletzt bearbeitet von einem Moderator: