Как мы можем повторно инициализировать поток, не убивая его? - PullRequest
1 голос
/ 02 февраля 2012

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

Ответы [ 3 ]

1 голос
/ 02 февраля 2012

То, о чем вы просите, может быть достигнуто только логикой вашей функции потока. Библиотека потоков / операционная система не знает о вашей логике и не может знать, куда вы хотите, чтобы она прошла повторная инициализация .

Также обратите внимание, что хотя вы можете добиться чего-то подобного, отменив и запустив поток, отмена потока довольно часто опасна (вы можете утечь ресурсы), если это возможно (поток должен достичь точки отмены), и ее следует избегать в большинстве случаев. Итак, вы вернулись на круги своя: внедрите в функцию логику для обнаружения события и перезапустите с любым определением запуска, которое вы хотите использовать.

1 голос
/ 02 февраля 2012

Создайте класс, который управляет потоком.В методе run этого класса он ожидает, пока некоторая работа не будет назначена классу в виде указателя на функцию или какого-либо другого класса, реализующего интерфейс «работа».

Как только работа назначена, потокможет перестать ждать и выполнить работу.Как только работа завершена, поток сидит и ждет, пока ему не будет назначено больше работы.

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

0 голосов
/ 02 февраля 2012

У вас может быть два события: перезагрузка и останов . Ваша функция потока будет ждать в цикле для любого из них. Если он обнаружит restart , он выполнит задачу и вернется в ожидании событий. Если он обнаружит stop , он просто вернется.

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