我有一个系统,我的单例类产生一个线程来进行计算。如果用户在另一个计算仍在运行时请求另一个计算,我希望它拆除现有线程并启动一个新线程。但是,它应该在继续之前等待第一个线程完全退出。我有所有的拆卸工作,但我似乎有一个问题,确保只有一个线程运行。我的方法是让StartCalculation函数调用mutex-> Lock()。析构函数中的线程释放锁。它不起作用。我是否正确地假设如果Lock()无法获得锁定,它会旋转并继续尝试重新获取锁定?可以从我的主应用程序线程调用此Lock()吗?任何想法都有帮助。也许wxMutex锁是正确的机制。
答案 0 :(得分:3)
要等待线程,您需要创建一个可加入的线程,只需使用wxThread::Wait()
即可。但是我同意上面的说法:这通常不是你通常会做的事情,绝对不是来自主GUI线程,因为你永远不应该阻止它,因为这会冻结UI。
考虑使用message queue简单地告诉现有线程它需要执行的新任务。