关于gtk多线程修改界面的问题

在制作可视化GDB过程中,作者遇到多线程修改GTK界面无法实时刷新的问题。通过研究发现,需要在gtk_init前调用g_thread_init(NULL)初始化多线程支持,并在操作界面时使用gdk_threads_enter()和gdk_threads_leave()进行线程同步。还需链接gthread-2.0库以避免编译错误。虽然存在潜在的死锁风险,但目前尚未遇到。
摘要由CSDN通过智能技术生成

 

关于gtk多线程修改界面的问题

                                                                                        --lihn1987

我学gtk的时间也不长,很多东西都不知道,

而且我认为如果单单是学习,而没有做过相关的作品的话,实在不能说自己学过。

于是我打算做个可视化的gdb,锻炼一下自己。

在制作的过程中遇到一个问题,需要从后台伪终端中不断的读一个值,有输出的话就显示在gtk的textview上,

这样读值的功能就只能用线程来实现,
于是我就想在线程中直接刷新textview的值,不过问题也由此出现了
问题情况如下所示

我在线程中更新了textview的textbuffer,
但是界面上不会显示,
经过试验发现界面上貌似必须有个事件去触发才会显示,
程序刚运行后,假如我不进行任何鼠标操作,则界面不刷新,
如果我是该窗口失去焦点,或者鼠标移动上面,或者按下按键,textview都会进行刷新值

我在网上查了很多资料,有说需要用gdb_threads_enter()和gdb_threads_leave的,我试过了无效
有说需要用
while (gtk_events_pending())gtk_main_iteration();
我也试过了,但有一定的概率出现错误导致程序退出
另外还有在线程中使用
gdk_window_process_all_updates();
但也有

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值