C ++ Boost Thread, повторное использование потоков - PullRequest
3 голосов
/ 17 апреля 2010

Я пытаюсь сделать что-то вроде этого:

thread t; // create/initialize thread
t.launch(); // launch thread.
t.wait(); // wait
t.launch(); // relaunch the same thread

Как реализовать что-то подобное с помощью потоков повышения? по сути, мне нужен постоянный поток с возможностью повторного запуска.

Я бы хотел избежать рабочей очереди, так как реализовано в моем случае довольно сложно

Спасибо

1 Ответ

5 голосов
/ 17 апреля 2010

Вы бы просто запустили поток в цикле. Он пытается взять единицу «работы» из очереди, выполняет работу и затем возвращается в очередь. Когда очередь пуста, она ждет.

Затем из другого потока вы можете вставить рабочие элементы в очередь, чтобы поток выполнял их.

Читая ваш вопрос еще раз, вы хотите сказать, что вы хотите, чтобы ваш главный поток уведомил рабочий поток о начале работы, но тогда главный поток должен немедленно начать ждать завершения рабочего процесса? Это будет означать, что одновременно работает только один поток. Там не было бы никакого смысла в этом. Потоки предназначены для одновременного выполнения.

Если предположить, что это не то, что вам нужно, то мне интересно, что может быть проще, чем простой рабочий поток, выполняющийся из очереди. Поток либо работает, либо ждет. Таким образом, вам нужна некоторая структура данных, которая обеспечивает связь между мастером и работником, чтобы работник мог ждать прибытия рабочего элемента, а мастер мог отправить рабочий элемент, который разбудит работника, а затем, когда рабочий элемент будет завершен , работник ждет другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...