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


Anmelden zum Antworten