我正在使用wxwidgets与boost :: thread一起。线程是工作线程,它发送一些事件到GUI:崩溃与提升::线程
线程创建:
thrd = boost::thread(boost::bind(workerFunction,this));
发送消息到GUI:
wxPostEvent(loWindow, event);
wxSafeYield();
在Windows下我看不出任何问题,但在Linux(Ubuntu 8.10)下启动应用程序时,会停止并显示以下错误消息:
_XCBUnlockDisplay: Assertion `xcb_get_request_sent(dpy->xcb->connection) == dpy->request' failed.
Aborted
我错过了什么?当workerFunction没有在一个线程中启动时,它没有问题。
问候, /mspoerr
感谢您的回答,但wxWidgets文档中提到: “在窗口系统中产生对待处理消息的控制,例如,当一个耗时的过程写入文本时没有偶然的良率,文本窗口将不会被正确更新,并且在具有协作式多任务处理的系统上,比如Windows 3.1其他进程不会响应。“ 在我看来,这是我需要的。当我不使用这个功能时,Windows应用程序也崩溃了。 /mspoerr – mspoerr 2009-06-28 20:58:39
您引用的文档正在讨论单线程应用程序。如果您想要在后台线程中运行,请使用像Sleep(0)(在windows.h中定义)或升级平衡的操作系统函数。 – 2009-06-28 21:18:27