Как я могу приостановить резюме всей темы? - PullRequest
0 голосов
/ 18 февраля 2019

Мой вариант использования: процесс -> пауза / возобновление запроса (через IPC) -> процесс B

Моя цель - сохранить использование ЦП процесса B, когда процесс B является фоновым.Потому что все потоки процесса B потребляют ресурсы процессора.Так что я хочу приостановить / перезапустить все потоки процесса B, когда захочу.

Q1) как я могу приостановить / возобновить все потоки в процессе B?

Следующее - только моя первая идея, Но я не уверен, что это хороший способ разрешить эту ситуацию.

Если вы знаете хорошее решение для этого, пожалуйста, дайте мне знать ваш совет.

<main thread of B process>
while(1)
{
 mCondition.wait(lock);
 //all thread are create & run in here
}

<handler thread of  B process>
if(request resume)
 mCondition.notify_one();
else
 //terminate all thread of B process

=> ЭтоИдея - это способ завершить все потоки и воссоздать все потоки.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

На самом деле нет очень «кроссплатформенного» способа завершения потоков.

Поскольку вы реализуете механизм паузы (выглядит как условная переменная? Я просто предположу, что это так), самый безопасный способдля этого, вероятно, нужно установить где-нибудь флаг "TERMINATE" и разбудить рабочие потоки.Когда рабочий поток просыпается, сначала проверьте этот флаг, чтобы увидеть, должен ли он завершиться.Если нет, то продолжайте свою работу, но если это так, просто найдите способ выйти из рабочей функции.Это в основном то, как вы безопасно завершаете поток в C ++.

0 голосов
/ 18 февраля 2019

На платформах POSIX вы можете просто kill(targetPid, SIG{STOP,CONT}) целевой процесс, и он приостановит / возобновит все свои потоки.

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