我用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

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

1回复

wxWidgets GUI应用程序中的多线程?

我在尝试为wxWidgets GUI应用程序创建一个工作线程时会遇到问题(基本上,我很困惑。),该工作线程将修改GUI属性本身之一。 (在这种情况下,wxTextCtrl :: AppendText)。 到目前为止,我有2个用于wx程序本身的源文件和2个头文件(不包括我自己的库,My​​
1回复

使用wxWidgets多线程时的奇怪行为

我的应用程序中有2个线程-一个UI,第二个正在更新一些数据。 第二个线程的类继承了wxThread类,并且具有一些变量,尤其是Worker *worker 。 如果我将worker的值从第一个线程更改为nullptr ,则应用程序将继续正常运行。 例如,如果将值更改为new Work
1回复

Windows上的c ++中的wxWidgets

我正在阅读这个特定的代码片段: - 这是在event.h头文件中定义的,我不明白“WXDLLIMPEXP_CORE”。 谢谢
2回复

C ++ WxWidgets:来自多个线程的消息的单个日志窗口

从多个线程收集日志消息并使用窗口显示所有消息的最佳/正确方法是什么? (线程正在运行时)。 我目前正在尝试将stdout(cout)重定向到wxTextCtrl,但在尝试通过多个线程进行操作时却失败了。 任何帮助,将不胜感激。
3回复

C ++ WxWidgets:跨多个线程将Stdout重定向到wxTextCtrl

我的应用程序是多线程应用程序(使用wxThreads)。 目前,主线程及其子工作线程正在将各种消息输出到Stdout(使用cout)。 我有一个带有wxTextCtrl的新框架/窗口,并希望将所有StdOut消息重定向到其中。 这行不通。 但是如果我替换最后一行 只要r
1回复

使用wxWidgets在另一个线程中显示进度指示器

我想知道是否有可能创建一个动画进度指示器,当主线程中正在进行操作时,该指示器不会冻结。 我认为也许创建第二个线程并使用它来显示一个简单的对话框(在本例中为wxGenericProgressDialog )将解决该问题。 我尝试了多种方法来执行此操作,但是所有方法均失败了。 有一个简单的例子
3回复

wxWidgets的wxThread删除了可连接的线程

我有一个关于wxWidgets的可接合的线程问题。 当用户需要时,我想停止执行某项工作的线程。 因此,我在此工作线程TestDestroy()中调用以检查是否应停止线程。 但是我只能通过调用Delete()来停止线程,对于可连接线程,不应调用Delete()。 我有可能停止线程(
3回复

wxWidgets-单线程多任务

我有一个用wxWidgets创建的GUI应用程序。 作为功​​能的一部分,我必须在操作GUI窗口的同时运行“任务”。 例如,我可以运行代码: 在那3秒钟的时间内,我的应用程序实际上将被冻结,直到显示wxMessageBox为止。 有没有一种方法可以在不使用多个线程的情况下在后台运行
3回复

2个线程-一个带有opengl窗口,另一个带有wxwidgets

我正在编写编辑器,但遇到一个问题,这意味着从我的opengl应用程序调用本机文件保存/打开对话框。 该编辑器是用我的游戏中的opengl gui编写的。 所以我想出了一个想法,当用户按下“加载”或“保存”时,我将创建一个线程,该线程将创建所需的(不可见的)wx窗口,它将调用wxFileDia
2回复

wxwidgets - 以正确的方式退出线程

我运行openCL / openGL程序,它使用wxWidget作为gui环境 类的内部对象,源自wxThread,我执行一些复杂的计算并构建许多openCL程序。 我想删除该线程。但是线程不会立即删除 - 它继续构建程序,并在完成所有编译之后。 我知道我可以使用wxThread: