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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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