我用C ++编写了一个使用wxWidgets的GUI和IBM ILOG Cplex工具,以解决优化问题。

在wx事件处理程序调用的函数之一中,我调用了IBM ILOG Cplex Optimizer,它本身就是多线程代码。

我意识到这会导致带有非意义的内存内容的过分错误。

由于我没有编写多线程代码的经验,并且想在不花三周的时间学习如何做的情况下逃脱现实,所以我想知道:

有什么安全的,可能不太好的方法来避免出现问题吗? (也许比将文件写入光盘,通过OS调用另一个任务并读回输出更优雅)。

从wx线程启动Cplex线程是一个坏主意吗?

使用两个可能在内部使用不同库的库来实现多线程通常不是一个好主意吗? (我不知道除了pthreads还有什么,cplex或wx使用了什么)。

任何帮助和背景信息表示赞赏。

===============>>#1 票数:0 已采纳

根据我的经验,规则是:

每个更改显示的wxWdiget函数调用都必须在wxWidget线程中进行

我对Cplex不太了解,但是如果您说它是多线程的,那么您很可能正在调用异步函数,并且会在回调中处理结果。 绝对不使用wxWidget线程调用该回调。 如果然后尝试在回调中显示结果,则违反了上述规则。 到那时,您将获得一些不错的小错误,就我而言,这些小错误通常会因堆损坏而出现。

要解决此问题,您必须将回调结果传递给wxWidget线程,并将其显示在该线程中。 有很多方法可以执行此操作,但是全局机制是在wxWigdet上触发一个自定义事件,该事件将传递给wxWidget线程。

检查此链接, http wxEvtHandler::AddPendingEvent(wxEvent& event) ,您需要使用wxEvtHandler::AddPendingEvent(wxEvent& event)

  ask by Max Flow translate from so

未解决问题?本站智能推荐: