WxWidgets wxThread - Problem: 2 mal Run aufrufen
-
hallo,
ich habe folgendes Problem:ich lege einen wxThread an:
(CWorkerThread ist abgeleitet von wxThread, in der auch Entry (RunMethode) überschrieben wurde)//Header: CWorkerThread * m_pWorkThread; //Cpp: m_pWorkThread = new CWorkThread(this); // übergabe des this Pointers (Dialog) if(!m_threadCreated && m_pWorkThread->Create() != wxTHREAD_NO_ERROR) { bool stop = true; } if(m_pWorkThread->Run() != wxTHREAD_NO_ERROR) { bool stop = true; } else { m_threadCreated = true; }
Später rufe ich noch mal die Stelle auf und dabei bekomme ich einen Error(2) zurück.. Der Thread hat definitiv die Entry-Funktion verlassen. Was muss ich noch aufrufen, damit ich am selben wxThread-Objekt wieder die Run-Methode aufrufen kann?
if(m_pWorkThread->Run() != wxTHREAD_NO_ERROR) { bool stop = true; }
Noch als Zusatzinfo:
IsRunning und IsAlive liefern jeweils false zurück, wenn der zweite druchlauf gestartet werden soll.
-
Was macht der Thread in der OnEntry Methode?
wxThreads werden per Default als 'detached' gestartet.
Wenn so ein Thread fertig ist, zerstört er sich selbst (fire and forget).Du musst also mit new einen neuen Thread anlegen.
-
Einen neuen Thread zu erstellen, wird wohl die beste Lösung sein.
http://wxwidgets.org/manuals/stable/wx_wxthreadoverview.html#wxthreadoverview
http://wxwidgets.org/manuals/stable/wx_wxthread.html#wxthread
-
Gordon73 schrieb:
Was macht der Thread in der OnEntry Methode?
wxThreads werden per Default als 'detached' gestartet.
Wenn so ein Thread fertig ist, zerstört er sich selbst (fire and forget).Du musst also mit new einen neuen Thread anlegen.
ist aber ein Joinable-Thread..
Der Thread ruft einige dlg-Funktionen auf (Listen füllen etc.)
phlox81 schrieb:
Einen neuen Thread zu erstellen, wird wohl die beste Lösung sein.
http://wxwidgets.org/manuals/stable/wx_wxthreadoverview.html#wxthreadoverview
http://wxwidgets.org/manuals/stable/wx_wxthread.html#wxthreadEntweder ich erstelle einen neuen Thread oder ich lasse ihn endlos laufen und rufe die eigentliche RunMethode erst beim Setzen eines Events auf..
Ich kenne das jetzt nur unter MFC, dass man dort WaitForSingleObject aufruft, die eine bestimmte Zeit bis unedlich warten konnte. Lässt sich sowas auch bei Wx so leicht realisieren?
MFG
-
Meine Multithreading Erfahrungen unter wxWidgets sind begrenzt, aber ich denke das das möglich sein sollte, evtl. aber auch dann Plattformabhängig ist.
Der Ansatz den Threads mit Events anzusprechen ist schon mal nicht verkehrt, die Threadklasse kannst du ja auch von wxEvtHandler erben lassen, damit kann sie dann Events empfangen und senden.