关于gtk多线程修改界面的问题
来源:互联网 发布:麻辣牛肉干做法 知乎 编辑:程序博客网 时间:2024/05/18 03:48
关于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();
但也有一定概率出现错误导致程序退出
我百思不得其解,最终综合了网上的很多信息终于搞明白了,原来是我没有对gtk对多线程的支持进行初始化。
在gtk_init函数之前需要调用g_thread_init(NULL)对多线程支持进行初始化,然后每当要对gtk界面进行操作的时候就使用gdk_threads_enter(),用完后使用gdk_threads_leave()进行释放,个人的理解,感觉这两个函数像是用来线程同步用的。
然而增加了gtk对多线程的支持后,编译时也要多连接一个库,gtk的手册里又说道,需要多链接个gthread-2.0的库,如果界面是用glade做的的话,直接在makefile.am中添加个 -lgthread-2.0的参数就可以了
至此终于可以在多线程中操作界面了,不过csdn有位达人告诉我说,我会遇到死锁的问题,可是还没告诉我为什么。。。。不过我暂时还没有遇到今天就写到这哈
- 关于gtk多线程修改界面的问题
- gtk在多线程中的界面问题
- gtk多线程更新界面
- GTK多线程界面更新(续)
- 关于修改多线程的方法
- 关于多线程的问题
- 关于多线程的问题
- 关于多线程的问题
- 关于多线程的问题
- 关于gtk的GCond
- 关于bochs安装时,出现gtk/gtk.h找不到的问题的方法
- 如何修改SugarCRM的关于界面?
- 关于css的界面问题:
- 关于gtk-config和pkg-config的问题
- 关于GTK+ widget上显示中文字符有误的问题!
- gtk多线程的程序实例
- 关于多线程使用的问题
- 关于fork的多线程问题
- DIJIYA迪吉亚 小牛踏踏车--- 踏出乐活新运动 ---
- 用PHP收发邮件
- 入侵简单思路
- “基于关键字匹配的文本过滤系统”配置文件的设计和实现(C/C++源码)
- Spring的AOP(一):什么是AOP
- 关于gtk多线程修改界面的问题
- 第一篇 试一下的 不用看了 没内容!
- 更改Oracle数据库表的表空间
- DLL编程中的"error LNK2001: 无法解析的外部符号"错误
- 收集的博客 网站
- fstream用“>>”进文件流时遇到空格的小问题
- 揭示PHP成功背后的秘密
- 计算机网络试题及答案
- 七年之痒 解读奇怪却合理的技术人才市场格局