2010-01-23 145 views
1

我有一个系统,我的单身类产生一个线程来做一个计算。如果用户在另一个计算仍在运行时请求另一个计算,我希望它拆除现有线程并启动一个新线程。但是,在继续之前,它应该等待第一个线程完全退出。我已经全部拆除,但我似乎遇到了一个确保只有一个线程运行的问题。我的方法是让StartCalculation函数调用mutex-> Lock()。并且析构函数中的线程释放锁。它不工作。我是否正确地认为如果Lock()无法获得锁,它会旋转并不断尝试重新获取锁?这个Lock()可以从我的主应用程序线程中调用吗?任何想法都有帮助。也许wxMutex锁是正确的机制。在wxwidgets中,如何让一个线程在继续之前等待另一个线程完成?

+0

你确定你正在锁定相同的互斥锁吗?你真的需要发布一些代码。 – 2010-01-23 13:30:51

+0

这只是当你使用线程时你永远不会做的事情。当第一个完成时,不要再开始另一个,而只需使第一个完成第二个任务。 – 2010-01-23 14:17:23

回答

3

要等待一个线程,您需要创建它可连接,并简单地使用wxThread::Wait()。然而,我同意上面的评论:这不是你通常会做的事情,绝对不是来自主GUI线程,因为你不应该阻止它,因为这会冻结UI。

考虑使用message queue来简单地告诉现有线程它需要执行的新任务。

相关问题