Chopin2001 Ответов: 1

Параллельная функция MFC


У меня есть класс и вот так

class mySample
{
  Cobject * cloneNode;
  std::list<Cobject *>cloneList;

}

и параллельная обработка как следующий код.
Но Это выполняется только тогда, когда есть только один cbobject.
если у клонелиста их два или больше... Функция OnPlay не работает.

function OnPlay(bool status, const CString& str ){

   if(pDC==NULL){
       CMainFrame * pFrame = (CMainFrame*)AfxGetMainWnd();
       CChildFrame *pChild = (CChildFrame*)pFrame->GetActiveFrame();
       CButterFlyEditorView *pView = (CButterFlyEditorView*)pChild->GetActiveView();
   ...

}


VStudio говорит
pChild 0xcccccccc {hWnd=???}
pFrame 0x00000000<null>
это 0x0984f...{hWnd=0x000000<null>}

Вы можете мне что-нибудь посоветовать?
спасибо, что уделили мне время.

Что я уже пробовал:

parallel_for_each(CloneList.begin(), CloneList.end(), [&](Cobject* cloneNode) {
    cloneNode->OnPlay(file_status, m_ PathName);
});

1 Ответов

Рейтинг:
12

KarstenK

Объяснение уже есть в вашем посте: pFrame 0x00000000

Чтение документации - это всегда хорошая идея. В тексте статьи AfxGetMainWnd вы можете прочитал

"If the function is called from a secondary thread in the application, the function returns the main window associated with the thread that made the call."
И ваши созданные потоки не имеют главного окна.

Вы должны сделать необходимые значения из основного потока в качестве входных параметров вашей потоковой функции. Windows-это такая же операционная система, как и iOS), которая работает в основном потоке. Так оно и есть никогда хорошая идея для доступа к элементам системы из других потоков. Это всегда требует отличной реализации.


CPallini

5.

Chopin2001

спасибо Какрстенк!