У меня есть класс ItemThreadingController
с boost::ptr_unordered_map
где ключ id
темы, а значение - boost::thread
с некоторой задачей. Я хочу добавить и удалить темы. В основном это примитивный менеджер потоков.using boost ptr_unordered_map
Вопрос в том, что является правильным способом использования ptr_unordered_map
- объявить и получить доступ к его элементам? Когда я пытаюсь как этот
class ItemThreadingController
{
private:
boost::ptr_unordered_map<int, boost::thread> controllerMap;
long int id;
public:
ItemThreadingController()
{
id = -1;
}
int AddThread(void (*func)())
{
boost::thread t(func);
id++;
controllerMap.insert(std::make_pair(id, t));
return id;
}
void StopThread(long int id)
{
controllerMap[id].interrupt();
controllerMap[id].join();
controllerMap.erase(id);
cout<<"Thread "<<id<<"has stopped and erased!"<<endl;
}
~ItemThreadingController() {};
};
У меня есть несколько ошибок
error C2664: 'void boost::ptr_map_adapter<T,VoidPtrMap,CloneAllocator,Ordered>::insert<boost::type>(InputIterator,InputIterator)' : cannot convert parameter 1 from 'boost::type' to 'boost::type' 518
error C2664: 'boost::ptr_map_iterator<I,F,S> boost::ptr_container_detail::associative_ptr_container<Config,CloneAllocator>::erase(boost::ptr_map_iterator<I,F,S>,boost::ptr_map_iterator<I,F,S>)' : cannot convert parameter 1 from 'boost::type' to 'boost::ptr_map_iterator<I,F,S>' 185
error C2039: 'type' : is not a member of 'boost::mpl::eval_if_c<C,F1,F2>' 63
error C2039: 'type' : is not a member of 'boost::mpl::eval_if_c<C,F1,F2>' 63
Как правильно его использовать?
И что я должен вставить? Когда я отправляю '& t' в качестве второго параметра, он не работает либо – lapots
@ user1432980 Это не работает, потому что' t' определено в стеке и неверно занимает адрес временного. Но это наверняка скомпилируется. По крайней мере, если вы используете перегрузку 'insert (key, value *)', потому что я не думаю, что есть перегрузка 'std :: pair <>' insert. – Johan