c++ - XinitThread 和 libfltk
问题描述
我正在使用带有 FLTK 的接口编译代码,我需要能够派生回调,因为它在点击“运行”时从表单中获取参数启动工作。我不能在函数开始时使用 fork 让一个线程立即返回 UI,据说 XInitThreads() 没有参数运行并且在失败时返回零,任何其他都是成功的。我的检查没有显示 XInitThreads 返回 0,所以这部分工作正常。然而我仍然得到一个错误:
[xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
rc: ../../src/xcb_io.c:260: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.
这出现两次,每个启动的线程都有一次。
我断言调用:
if(XInitThreads() == 0)
{
fprintf(stderr, "Warning ! No forking available.\n");
}
不出现警告。
使用 ubuntu 20.10
g++
FLTK-1.1
ARCH amd64
解决方案
//通过使用 sdt::thread.
Fl_Button b;
b.callback(wrapper, data);
void wrapper(Fl_Widget *w, void *v) {
std::thread th(task, v);
th.detach();
}
包装函数启动一个线程,我们不加入回调函数内部,或者根本不加入。
推荐阅读
- python - 用于文本生成目的的 Keras LSTM 模型
- python - 如何将函数应用于在熊猫中以 at-sign 命名的索引?
- python-3.x - 获取 Twitter 用户时间线
- php - xampp中具有多个端口的多个站点
- firefox - 具有遮罩的 SVG“使用”元素上的不透明度的 Firefox 问题
- python - 控制opencv凸包
- php - 如何使用 php 和 angularjs 显示 wordpress 内容和图像?
- rebol - rebol / red parse with [to end] 规则
- sql - 带条件的 Oracle SQL 求和
- java - 使用 RecyclerView 的 OnLoadMore 功能