У меня есть функция f1, которая работает в потоке, и она непрерывно выполняет расчет c1.Обработка события в текущей нити
Но когда к нему приходит специальное событие, f1 должен выполнить расчет c2 (вместо вычисления c1).
Как это реализовать? Я много искал, случай производителя-потребителя или условные блокировки не подходят для моей реализации (я так думаю), потому что я не хочу, чтобы поток останавливался до тех пор, пока событие не произойдет.
Может кто-нибудь мне помочь?
Спасибо заранее
class myclass
{
void f1 (void)
{ //I do not want the f1 stop, it has to do its work, and when f2 send an event to him, act different
while (1) {
if(there is an event from f2)
do c2;
else
do c1;
// I do not want to loose any event either
}
}
void f2(void)
{//f2 runs in parralel to f1
}
void execute()
{
// f1_thread do calculations (c1) continiously
boost::thread* f1_thread = new boost::thread(boost::bind(&myclass::f1, this));
// f2_thread has to send an event to force the f1_thread (once a while) to do calculation c2 instead of c1
boost::thread* f2_thread = new boost::thread(boost::bind(&myclass::f2, this));
}
}
int main()
{
myclass _myclass;
_myclass.execute();
}
Я хочу «F1» стоп «c1» расчеты и сразу же перейти на расчет c2, когда «f2» послать ему сигнал (я не знаю, о сигналах пока). расчет c1 очень трудоемкий, и если я использую предложение «if», когда происходит событие, «c2» не может быть запущен до тех пор, пока не закончится «c1».
не могли бы вы ответить на меня вместо голосования -1? Я новичок в потоках, и я хочу начать использовать события. Если вопрос такой простой, напишите ответ. спасибо –
Это * «причина, по которой я не хочу использовать« если », заключается в том, что мои вычисления очень трудоемки, и если я использую« if », когда происходят изменения из f2, f1 не заметит его до следующего раунда. '* не имеет абсолютно никакого смысла - попробуйте объяснить более четко. –
@JohannGerell Спасибо за внимание, я хочу, чтобы «f1» остановил вычисления «c1» и сразу переключился на расчет c2 всякий раз, когда «f2» отправил ему сигнал (пока я еще не знаю о сигналах). расчет c1 очень трудоемкий, и если я использую предложение «if», когда происходит событие, «c2» не может быть запущен до тех пор, пока не закончится «c1». Надеюсь быть ясным. Спасибо –