Можно ли смешивать нити c ++ 0x с gio GCancellable? - PullRequest
1 голос
/ 20 сентября 2011

Если я не ошибаюсь, нет простого способа сделать нить c ++ 0x отменяемой.Мне интересно, допустимо ли использовать GCancellable , смешивая его с нитью c ++ 0x.

Если ответ

Нет

Полагаю, мне следует использовать glib threads или это тоже не так законно?

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

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

Если это так, то да, вы можете легко смешать GCancellable с std::thread.


Нет простого способа сделать std::thread отменяемым.

Это неправильно.

Тамэто не ненулевой способ сделать все отменяемые std::thread.

Это правильно.

Проблема заключается в общем решении.Уведомление достаточно просто.Самое сложное - убедиться, что поток видит уведомление.Поток может быть заблокирован на мьютексе или IO.Вы не можете просто убить нить.Могут возникнуть все виды ошибок.

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

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

0 голосов
/ 21 сентября 2011

Вы имеете в виду что-то вроде прерывистых потоков boost ?

Этот аспект не вошел в стандарт, но вы можете получить от std::thread, чтобы предложить защищенный метод check_interrupted(), который выдает, если кто-то вызвал публичный метод interrupt().

Я бы не стал смешиваться с нитевыми конструкциями Gnome. Похоже, больше проблем, чем стоит.

...