Messages in Threads
-
Hallo Forum-Member!
Ich versuche gerade eine kleine Direct3D-Engine in einer DLL unterzubringen, die beim Aufruf von Init() dann einen eigenen Thread aufmacht und quasi unabhängig von der sie aufrufenden Funktion läuft.
Alles schön und gut, jedoch wird nichts gezeichnet.
Habe durch Logging mein Problem jetzt auf die Messages beschränkt:
Bevor mit _beginthread der Thread eröffnet wird, werden alle Windows-Messages von meinem CALLBACK MessageHandler entgegengenommen und "verarbeitet". Sobald aber ein eigener Thread aufgeht, wird niemals nimmer mehr in den MessageHandler gesprungen, also ist auch das Fenster nicht verschiebbar / ansprechbar / etc. ...
Auch ein PeekMessage - wo ich NULL als Fensterhandle übergebe (der ja dann alle Messages des laufenden Threads abfangen soll) - bringt nichts. Ein GetMessage wartet dementsprechend ewig.
Also, wo kann ich nun Messages entgegennehmen wenn ein Thread gestartet wird?!
Meine Thread-Oberklasse sieht ca. so aus (wichtige Methoden):
bool CThread::ThreadStarten() { m_ulThreadNo = NewThread(ThreadSteuerung, m_uiStackGroesse, this); if(m_ulThreadNo > 0) { m_bLaueft = true; return true; } else return false; } void CThread::ThreadStoppen() { m_bLaueft = false; } // Thread-Schleife void CThread::AusfuehrungsSchleife() { // Hier verrichtet die abgeleitete Klasse dann ihre Arbeit } // STATISCH !! void CThread::ThreadSteuerung(void* AufrufenderThread) { CThread* AktuellerThread = static_cast<CThread*>(AufrufenderThread); while(AktuellerThread->m_bLaueft) { AktuellerThread->AusfuehrungsSchleife(); Sleep(AktuellerThread->m_dwIntervall); } EndThread(); }
Ein PeekMessage in der AusfuehrungsSchleife() der abgeleiteten Klasse taugt nichts.
Müsste ich in der while-Schleife der Thread-Kontroll-Funktion eine Abfrage machen?! Scheint aber auch nicht zu funzen.Blick' da irgendwie nicht mehr so richtig durch.
Falls mir einer helfen kann -> Danke!
Ciao...
-
Jeder Thread der mit Messages arbeiten will, brauch ne eigene Nachrichtenschleife.
-
Original erstellt von <Herbert>:
Jeder Thread der mit Messages arbeiten will, brauch ne eigene Nachrichtenschleife.Tja, und wie funzt das?
Eigentlich soll nur mein Fenster ein WM_KEYDOWN etc. empfangen können.
Wo putte ich die bei _beginthread denn rein?! Das ist doch nicht die Steuerungsfunktion oder doch?!?
Und wie kann ich dann Messages des Threads peeken?!?
-
Thread1 | Empfange Message | Sende Message an Thread2 (PostThreadMessage) |
Call PostThreadMessage. If it fails, call the Sleep function and call PostThreadMessage again. Repeat until PostThreadMessage succeeds.
-
Original erstellt von RenéG:
**```
Thread1
|
Empfange Message
|
Sende Message an Thread2 (PostThreadMessage)
|[quote]**
[/QUOTE]
Das hilft mir auch nicht weiter. Es geht nicht um das Weitersenden, es geht zunächst mal um das Empfangen. Sobald ich meine abgeleitete Klasse (s.o.) "starte", werden keine Messages mehr entgegengenommen.
Wie kann ich das bei Threads vernünfitg machen?!?Trotzdem danke für die Bemühungen.