Suspend-und resume-ein C++ thread in einem anderen
Ich habe eine C++ - code mit zwei threads in es. Nach einem Ereignis " A " in thread 2, thread 1 sein sollte angehalten(suspended), einige weitere Aufgaben ausgeführt werden sollen, in thread 2 (sagen wir Fall 'B')und schließlich-thread 1 wieder aufgenommen werden sollen. Gibt es eine Möglichkeit, dies zu tun?
Mein code sieht ungefähr so aus:
HANDLE C;
DWORD WINAPI A (LPVOID in)
{
while(1){
//some operation
}
return 0;
}
DWORD WINAPI B (LPVOID in)
{
while(1){
//Event A occurs here
SuspendThread (C);
//Event B occurs here
ResumeThread (C);
}
return 0;
}
int main()
{
C = CreateThread (NULL, 0, A, NULL, 0, NULL);
CreateThread (NULL, 0, B, NULL, 0, NULL);
return 0;
}
- Sie tun jetzt, was das problem ist?
- Random deadlock, kein Zweifel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hallo ich habe ein Beispiel, das ich habe, inspiriert von cpp-Referenz.
Das Beispiel verwendet C++ 11 so gegeben, daß diese Frage nicht gekennzeichnet win32-aber c++ und multithreading, poste ich etwas.
Erste hier ist der original link.
http://en.cppreference.com/w/cpp/thread/sleep_for
Nun, hier ist der code, den ich bekam, der das problem löst.
Hoffe, das hilft, alle Kommentare sind willkommen 🙂
Da Sie zu sein scheinen mit win32 können Sie eine event
Wenn Sie wollen, etwas zu tun, ähnlich wie in pthreads-es ist ein Beispiel hier.
In beiden Fällen, den Faden zu testen, wird ein Bedingungs/Ereignis - (und warten, ob es eingestellt wird oder weiter, wenn es nicht ist) und der thread B wird gesetzt und klar die Bedingung/Ereignis. Hinweis: Sie müssen möglicherweise auch eine mutex zwischen thread A und B je nachdem, was Sie tun, können Sie korrupte jeder andere?