1

如果我没记错的话,没有简单的方法可以取消 c++0x 线程。我想知道将GCancellable与 c++0x 线程混合使用是否合法。

如果答案是

我想我应该使用glib 线程或者它也不那么合法?

4

2 回答 2

3

我不是很熟悉GCancellable. 快速阅读后,它似乎是一个分层通知系统。

如果是这种情况,那么是的,您可以轻松地GCancellablestd::thread.


没有简单的方法可以std::thread取消。

这是错误的。

没有非零成本的方法可以让所有std::threads 都可以取消。

这是对的。

问题是提供一个通用的解决方案。通知很容易。困难的部分是确保线程看到通知。线程可能在互斥锁或 IO 上被阻塞。你不能只是杀死线程。各种不好的事情都可能发生。

每个单独的实施都可以根据您的特定需求自由实施自己的取消系统。

如果您需要从阻塞互斥体中中断,请确保您只使用 timed_mutexes,并且您调用g_cancellable_is_cancelled的频率足够高,您的线程将根据需要取消。

于 2011-09-21T15:08:34.273 回答
0

你的意思是boost的可中断线程之类的东西?

这方面没有成为标准,但您可以从中派生出std::thread一个受保护的check_interrupted()方法,如果有人调用公共interrupt()方法,该方法就会抛出。

我不会费心与 Gnome 的线程结构混合。听起来麻烦多于它的价值。

于 2011-09-21T11:24:06.567 回答