调用Fl_Double_Window的隐藏方法在多线程 FLTK C++应用程序 (Visual Studio 2010
Calling hide method of Fl_Double_Window has no effect in a multi-thread FLTK C++ application (Visual Studio 2010)
我正在开发一个C++的FLTK应用程序。这是一个多线程应用程序,它使用以下代码在线程中创建并显示模态窗口:
Fl_Double_Window* dlg = new Fl_Double_Window(0, 0, 200, 100);
...
dlg->set_modal();
Fl::visual(FL_DOUBLE|FL_INDEX);
dlg->show();
然后在同一线程中,我创建一个新线程并将指针传递给Fl_Double_Window
对象作为线程参数:
CreateThread(
NULL, // default security attributes
0, // use default stack size
&beginProgress, // thread function name
(LPVOID) dlg, // argument to thread function
0, // use default creation flags
NULL);
在我的线程函数中,我做了一些操作,然后我需要隐藏显示的模态窗口:
DWORD WINAPI beginProgress(LPVOID args)
{
//do some operations
((Fl_Double_Window*)args)->hide();
return 0;
}
问题在于我的代码成功执行而没有错误,但是在执行hide
对象指针的方法后dlg
窗口不会隐藏并且似乎调用hide
甚至使用delete dlg
删除窗口对象都没有效果。
我想这个问题与多线程行为有关,但我无法猜测是什么原因导致问题以及我应该如何解决它。
请阅读
FLTK多线程指南:
FLTK 支持多个平台,其中一些平台不允许任何 其他,但用于处理系统事件和打开或关闭的主线程 窗户。安全的做法是遵守以下规则 所有操作系统上的线程:
- 不要
show()
或hide()
任何包含派生自Fl_Window的小部件的内容,包括对话框、文件选择器、子窗口或Fl_GL_Windows
以下是 FLTK 推荐的从后台线程处理 GUI 更新的方法:
唯一的 解决方法是将要执行的操作存储在静态变量中,调用
fltk::awake()
,并反复调用主线程fltk::wait()
, 每次调用后检查并处理静态值。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?