如果我没记错的话,没有简单的方法可以取消 c++0x 线程。我想知道将GCancellable与 c++0x 线程混合使用是否合法。
如果答案是
不
我想我应该使用glib 线程或者它也不那么合法?
我不是很熟悉GCancellable.
快速阅读后,它似乎是一个分层通知系统。
如果是这种情况,那么是的,您可以轻松地GCancellable
与std::thread
.
没有简单的方法可以
std::thread
取消。
这是错误的。
没有非零成本的方法可以让所有
std::thread
s 都可以取消。
这是对的。
问题是提供一个通用的解决方案。通知很容易。困难的部分是确保线程看到通知。线程可能在互斥锁或 IO 上被阻塞。你不能只是杀死线程。各种不好的事情都可能发生。
每个单独的实施都可以根据您的特定需求自由实施自己的取消系统。
如果您需要从阻塞互斥体中中断,请确保您只使用 timed_mutexes,并且您调用g_cancellable_is_cancelled
的频率足够高,您的线程将根据需要取消。
你的意思是boost的可中断线程之类的东西?
这方面没有成为标准,但您可以从中派生出std::thread
一个受保护的check_interrupted()
方法,如果有人调用公共interrupt()
方法,该方法就会抛出。
我不会费心与 Gnome 的线程结构混合。听起来麻烦多于它的价值。