Немного больше информации поможет получить лучший ответ:
- Ваши рабочие потоки ожидают других событий перед запуском?
- Как ваши темы общаются друг с другом?
- У вас всегда будет возможность завершить изящно, или вы ожидаете принудительного завершения некоторых потоков?
Другой вопрос , который вы упомянули, сделал очень хорошую мысль:
Как правило, способ завершения потока - просто возврат из функции, которая определяет поток. Как правило, основной поток сигнализирует рабочему потоку о выходе, используя объект события или просто целочисленное или логическое значение. Если рабочий поток ожидает в WaitForSingleObject, вам может потребоваться изменить его на WaitForMultipleObjects, где один из объектов является событием. Основной поток вызовет SetEvent, а рабочий поток проснется и вернется.
В зависимости от того, что вы настроили в ACE, вы можете использовать межпроцессное взаимодействие между вашим основным потоком и вашими рабочими потоками, чтобы дать им команду прекратить, которую они примут и обработают при следующей проверке событий. В качестве альтернативы вы можете использовать Linux * select
.
Надеюсь, это направит вас в правильном направлении.