Как сигнализировать нить в Linux? - PullRequest
1 голос
/ 21 марта 2011

Я работаю над многопоточным приложением, где я использую SetEvent(), чтобы закрыть поток в Windows.

Каков эквивалент в linux c ++ для отправки сигнала потоку? Приложение должно работать как на Windows, так и на Linux.

В Windows я делаю следующее:

В пользовательском интерфейсе у меня есть кнопка сказать Закрыть тему . Как только пользователь нажмет кнопку, он установит событие, используя SetEvent(), что заставит поток остановить его сам.

void closethread()
{
    Setevent(hEventhandle);
}


void * threadProc(void* args)
{
    waitforsingleobject(hEventhandle,infintie)
}

Есть ли лучший способ закрыть поток, когда пользователь нажимает кнопку?

Ответы [ 2 ]

3 голосов
/ 21 марта 2011

Если вы пишете кроссплатформенное приложение с графическим интерфейсом, вы, вероятно, уже используете какую-то кроссплатформенную инфраструктуру с графическим интерфейсом, например Qt или WxWidgets .Эти фреймворки обычно поставляются с собственными кроссплатформенными библиотеками для всех видов вещей, включая многопоточность.Таким образом, вместо использования собственных API-интерфейсов, ознакомьтесь с документацией используемой вами инфраструктуры.

В качестве альтернативы вы можете рассмотреть возможность использования Boost.Thread для обработки многопоточности в переносимомспособ.

2 голосов
/ 21 марта 2011

Вы можете использовать условную переменную - см., Например, pthread_cond_wait

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