Thread aus Thread starten-->Execute des gestarteten Thread wird nicht ausgeführt
-
Hallo,
ich stehe gerade vor dem Problem, dass ein zu startender Thread Execute() nicht ausführt.
Der Code gleicht strukturell dem Folgenden:
Klasse A:
B *t[MAX]; ... A::Foo(...) { ... t[1]= new B(...); ... }In Klasse B:
MyThread *thread1; ... B::B(...) { ... thread1= new MyThread(false, ...); ... }In Klasse OtherThread:
void __fastcall OtherThread::Execute() { A a; (A::*callFoo)(...)= &a.Foo; ... (a.*callFoo)(...); ... Terminate(); }Zur Vervollständigung noch Klasse MyThread:
// Ctor MyThread::MyThread(CreateSuspended,...):public TThread(CreateSuspended) { ... } void __fastcall MyThread::Execute() { ... }Das "Eigenartige"(für mich) ist, dass MyThread einwandfrei funktioniert, wenn ich nicht den Umweg über einen Aufruf in OtherThread gehe, sondern bspw. A::Foo(...) direkt aufrufe.
Konstruktor von MyThread wird aber in jedem Fall regulär aufgerufen(CreateSuspended ist false).
Kann mir jemand einen hilfreichen Tipp geben???
-
Hi PosSex,
wenn du einen Thread aus einem anderem Thread starten möchtest, dann solltest du die ganze Sache über Synchronize machen.
void __fastcall MacroThread::Execute() { //---- Hier den Thread-Code plazieren---- for(...) { if(...) { nextIndex=...; Synchronize(newThread); } } Timer(5000); } void __fastcall MacroThread::newThread() { Thread[Thread.size()] =new MacroThread(nextIndex); }Gruss, Sven