Boost :: Функция, связанная с функцией члена, становится недействительнойC++

Программы на C++. Форум разработчиков
Anonymous
Boost :: Функция, связанная с функцией члена, становится недействительной

Сообщение Anonymous »

У меня есть простая реализация пула потоков с использованием Boost :: function и Boost :: Bind , чтобы уменьшить подпись функции члена до void func (void) . Затем это использует очередь Boost :: function и int пары, всплывает верхнюю часть очереди и выполняет функцию (все обернутые в блок Mutex).

Код: Выделить всё

threadPool->addJob(boost::bind(&Foo::bar, this, arg1, arg2));

...

typedef boost::function func;
std::queue funcQ;

void ThreadPool::addJob(func f){
funcQ.push(std::make_pair(f, j));
}

if (!funcQ.empty()){
func localFunc = (funcQ.front()).first;
...
funcQ.pop();
...
localFunc();
}
Однако, после нескольких итераций, это вызвало Segfault, когда я призвал оператора () на функцию, поэтому я бросил в оператор Assert, чтобы убедиться, что функция была вызова:

Код: Выделить всё

...
assert(funcQ.front().first);
func localFunc = (funcQ.front()).first;
...
lo и вот, после нескольких итераций поездок Assert, указывая на то, что My Boost :: function не поддается вызову.
Я сначала подумал, что, возможно, данные функции (из Foo класс) были уничтожены до того, как была вызвана функция, однако, как я понял, в форме, как можно было создать функцию. К сожалению, я недостаточно знаю о том, что заставляет Boost :: Function S будет недействительным, чтобы продвинуться дальше по проблеме. Неверно ли я привязываю функцию члена, или проблема лежит где -то между там и пытается ее назвать?>

Подробнее здесь: https://stackoverflow.com/questions/176 ... es-invalid

Вернуться в «C++»