2016-02-24 4 views
0

Я ищу способ вызова функции обратного вызова, когда заканчивается поток повышения (ускорение версии 1.60, обычная нить, группа нитей или пул). Я прочитал этоДоступна функция завершения обработки вызовов

How can I tell reliably if a boost thread has exited its run method?

но мне нужен какой-то обратный вызов. есть идеи как это сделать? Должен ли я создавать какую-то условную переменную?

Спасибо за помощь!

+1

Там нет обратного вызова, определенный на 'повысить :: thread' отделку. Вместо этого вы можете присоединиться к потоку и вызывать любой обратный вызов, который вы хотите сами. – SergeyA

+0

Спасибо за ответ. Я догадался. Я думаю, что я, наконец, займусь этим или создаю условную переменную. Благодаря! – gilgamash

+0

Я не понимаю проблему? Если вы хотите узнать, когда поток завершает обратный вызов, пусть он вызывает вашу функцию обратного вызова в качестве последней строки перед выходом. –

ответ

1

Самым простым решением было бы обернуть первоначальную функцию резьбы:

#include <boost/thread.hpp> 
#include <iostream> 

void callback() 
{ 
    std::cout << "callback invoked" << std::endl; 
} 

void orig_thread_func() 
{ 
    std::cout << "thread function invoked" << std::endl; 
} 

void wrapper(void (*func)()) 
{ 
    func();  // invoke your original thread function 
    callback(); // invoke callback 
} 

int main() 
{ 
    boost::thread t(&wrapper, &orig_thread_func); 
    t.join(); 
    return 0; 
} 
Смежные вопросы