如何在c++中避免多线程问题(wxWidgets和Cplex)
How to avoid multi-threading problems (wxWidgets and Cplex) in C++?
我用c++编写了一个工具,使用wxWidgets作为GUI和IBM ILOG Cplex来解决一个优化问题。
在wx事件处理程序调用的一个函数中,我调用了IBM ILOG Cplex Optimizer,它本身就是多线程代码。
我意识到这会导致非合理内存内容的不确定性错误。
由于我没有编写多线程代码的经验,并且不想花三周时间学习如何编写多线程代码,所以我想知道:
是否有一些安全的,可能不太优雅的方法来避免这里的问题?(也许,这比将文件写入磁盘,通过操作系统调用不同的任务并将输出读入更优雅)。
从wx线程启动复杂线程是一个坏主意吗?
使用两个可能在内部使用不同库来实现多线程的库通常是一个坏主意吗?(我不知道除了pthreads之外还有什么,也不知道cplex或wx使用的是什么)根据我的经验,规则是:
更改显示的每个wxWdiget函数调用必须在wxWidget线程中进行
我不太了解复杂,但如果你说它是多线程的,很可能你正在调用一个异步函数,你在回调中处理结果。回调绝对不是在wxWidget线程中调用的。如果您尝试在回调中显示结果,则违反了上述规则。这时就会出现一些小bug,在我的例子中通常表现为堆损坏。
要解决这个问题,必须将回调的结果传递给wxWidget线程,并在该线程中显示它们。有很多方法可以做到这一点,但全局机制是触发wxWigdet上的自定义事件,该事件被传递给wxWidget线程。
查看此链接,http://wiki.wxwidgets.org/Custom_Events您需要使用wxEvtHandler::AddPendingEvent(wxEvent& event)
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- wxWidgets jpeg库构建问题
- Wxwidgets 在另一台计算机上运行二进制文件时出现问题
- freeze()的问题,在Linux中的wxwidgets中的thaw()函数
- 在Windows 10上使用wxWidgets(MinGW模式)编译源代码的问题
- 在 Mingw 64 下使用 wxWidgets 3.0.2 库时出现问题
- 安装wxwidgets 2时出现问题
- Visual Studio中的wxWidgets链接问题
- Wxwidgets/Wx Perl网格大小问题
- 如何在c++中避免多线程问题(wxWidgets和Cplex)
- Ubuntu中的wxWidgets和X11问题
- Wxwidgets aui管理器问题
- WxWidgets文件对话框问题