C ++, как ждать выполнения метода, который выполняется в другом потоке, а затем в основном потоке (VS2010) - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть метод, который выполняется в другом потоке, а не в основном потоке. Если это заканчивается, он вызывает обратный вызов. Но основной поток должен ждать, в противном случае он уничтожает объект, который обратный вызов хочет вернуть.

Теперь для простоты у меня есть следующий код:

int main()
{
    Something* s = new Something();
    s.DoStuff(); // Executed on another thread
    delete (s); // Has to wait for DoStuffCallback() to be executed
}

void Something::DoStuff()
{
    // Does stuff
    // If done, calls its callback
}
void Something::DoStuffCallback()
{
    // DoStuff has finished work
}

Как мне дождаться выполнения DoStuffCallback () и продолжить работу с основным потоком?

Большое спасибо!

Edit:

Это не работает для меня, так как у меня нет доступа к нужному компилятору. (Я уже упоминал VS2010)

1 Ответ

0 голосов
/ 07 ноября 2018

с Win32 Event

#include <windows.h>

int main()
{
    HANDLE handle = ::CreateEvent(NULL, TRUE, FALSE, NULL);

    Something s;
    s.DoStuff(handle); // Store the event handle and run tasks on another thread

    // Wait for the event on the main thread
    ::WaitForSingleObject(handle, INFINITE);
}

void Something::DoStuffCallback()
{
    // DoStuff has finished work
    ::SetEvent(m_handle);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...