2015-04-10 3 views
0

Я хочу создать поток с ACE_thread_manager, при отладке нет ошибки. но результат неправильный. Функция не работает; такой код:Менеджер потоков ACE не может вызвать функцию

#include "ace/OS.h" 
#include "ace/Log_Msg.h" 
#include "ace/Thread_Manager.h" 
#include <iostream> 

void thread_start(void* arg) 
{ 

    std::cout << "Running thread..\n"; 
} 

int main(int argc, char *argv[]) 
{ 
    ACE_Thread_Manager::instance()->spawn(ACE_THR_FUNC(thread_start), 0, THR_NEW_LWP);  
    return 0; 
} 

enter image description here это демо должно напечатать «Идущие нить ..», но когда я его отладки, он не печатать ничего. Эти китайцы означают «Пожалуйста, нажмите любую клавишу, чтобы продолжить».

+1

Проблема, скорее всего, в том, что вы не дождались фактического завершения потока, поэтому процесс завершается до того, как поток будет иметь время для запуска. Вам нужно дождаться окончания потока. –

+1

Если вы не хотите ждать потока, вам нужно отделить его (используя, например, флаг «THR_DETACHED»). –

+0

十分 感谢 您 解决 了 我 的 问题 !! Я пытаюсь добавить «ACE_Thread_Manager :: instance() -> wait();" Я получил то, что хочу – Lucifer

ответ

1

Вам нужно подождать в вашем главном, пока ваши рабочие потоки не закончатся. Как вы говорите, перед возвращением в основной строке вы должны добавить следующую строку.

ACE_Thread_Manager::instance()->wait();