У меня проблема с вектором в моей программе. Я нашел много похожих проблем, но не нашел решения. Этот код в новой теме:
while(status == RUN){
msleep(20);
while(status != DESTROY && (!actions.empty()) ){
item = actions.begin();
(*item)();
cout<< "try remove the action!\n";
item=actions.erase(actions.begin());
cout << "everything ok!\n";
}
}
вывод:
action!
try remove the action!
Segmentation fault
Actions - это вектор
struct action{
string query;
long size;
void operator()(){
cout << "action!\n";
}
};
обновление
Настоящая проблема: структура с этим методом уже уничтожена.
class mthread{
...
deque<action> actions;
...
operator(){
(loop above)
}
};
class mthread_holder{
mthread* mt;
operator()(){
(*mt)();
}
mthread_holder(mthread *p){
mt = p;
}
};
тогда я просто использую:
threads.back().thrd = new boost::thread(mthread_holder(mthrd));
Я думаю, мне нужно хранить его более безопасно
Как я могу сохранить вызываемое в потоке и удерживать указатель на него без boost :: bind?