Wielowątkowość WTL, wiele interfejsów i bibliotek

Mam wątek główny, który wyświetla interfejs, w innym wątku utworzonym z głównego wątku przed wyświetleniem interfejsu głównego, kolejno tworzę kolejne okna: Tworzę pierwsze okno:

    CWarningDlg warnDlg;
    warnDlg.Create(NULL);
    warnDlg.ShowWindow(SW_SHOW);
    warnDlg.BringWindowToTop();
    CMessageLoop _Loop ;

    if(_MyAppModule.AddMessageLoop(&_Loop))
    {
        nRet = _Loop.Run();
        _MyAppModule.RemoveMessageLoop();
    }
    warnDlg.DestroyWindow();
    if (nRet == SOME_VALUE)
    {
       doSomethingElse();
    }

Zrób coś innego:

 CActionDlg actDlg;
    actDlg.Create(NULL);
    actDlg.ShowWindow(SW_SHOW);
    actDlg.BringWindowToTop();
    CMessageLoop _Loop ;

    if(_MyAppModule.AddMessageLoop(&_Loop))
    {
        CreateAnObject(); //this also launches an object Specific Worker Thread
        nRet = _Loop.Run();
        _MyAppModule.RemoveMessageLoop();
    }

Funkcja CreateAnObject wywołuje niektóre funkcje z „ComplexObject.DLL”, które tworzą złożony obiekt, który zawiera ID THREAD wątku, który nazywał funkcję CREATION, pobiera go za pomocą::GetCurrentThreadId(); podczas tworzenia tego złożonego obiektu GetCurrentThreadId () zwraca ID DRUGIEJ NICI, która jest DOBRA. Teraz w moim CActionDialog otrzymuję powiadomienia z tego obiektu usind :: SendMessage (), funkcja SendMessage jest wywoływana z wątku Worker, który jest specyficzny dla właśnie złożonego obiektu. Kiedy otrzymuję te powiadomienia, muszę uzyskać dostęp do niektórych złożonych wartości obiektów, dlatego wywołam inne funkcje z 'ComplexObject.DLL', które weryfikują użycie funkcji :: GetCurrentThreadId (), że identyfikator wywołującego wątku jest taki sam jak identyfikator wątku, który utworzył ten złożony obiekt. Ta weryfikacja kończy się niepowodzeniem, ponieważ funkcje są wywoływane przy użyciu ID wątku GŁÓWNEJ NITKI, która ma GUI interfejsu głównego. Dlaczego? Nie rozumiem! (Mam nadzieję, że udało mi się wytłumaczyć).

questionAnswers(1)

yourAnswerToTheQuestion