On Mon, 05 Dec 2005 13:14:22 -0000, darkserj <5922@users.rsdn.ru> wrote:
> не получается запустить потоки в которых есть noncopyable члены (condition, mutex)
>
> > class worker {
> public:
> worker(int index):m_index(index) {}
> void push_socket(int s) { m_sock.attach(s); ready.notify_one();}
> void operator ()() {
> boost::mutex::scoped_lock l(lock);
> ready.wait(l);
> std::cout << "Thread: " << m_index << " run" << std::endl;
> std::cout << "Thread: " << m_index << " done" << std::endl;
> }
> protected:
> int m_index;
> boost::condition ready;
> boost::mutex lock;
> };
> };
>
>
> void server::create_workers(int count) {
> for(int i=0;i<count;i++) {
> boost::shared_ptr<worker> w(new worker(i));
> workers.push_back(w);
> const ia::worker &wor = *(workers[i].get());
> threads.create_thread(wor);
> }
> }
>
>
> как правильно поступить?
Тебе нужно избежать копирования.
Попробуй заменить выделенные строки на:
threads.create_thread(bind(apply<void>(), &*w));
Вообще, я бы стартовал поток в к-торе worker.
--
Maxim YegorushkinPosted via RSDN NNTP Server 2.0