设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
GTK+ 2的多线程编程
返回列表
查看:
1201
|
回复:
8
GTK+ 2的多线程编程
[复制链接]
zhong
zhong
当前离线
积分
1762
IP卡
狗仔卡
发表于 2004-7-16 03:28:10
|
显示全部楼层
|
阅读模式
小弟不才.看了很多资料和源代码也是不太明白..gtk2.0里的多线程是怎样搞的
小弟的一个程序...需要常常要删除/tmp里.由程序生成的一些文件或打开一些文件,如果打开或删除的文件比较少时还没什么.如果是大的文件.整个程序界面就不刷新了,最明显的就是,,在程序删除文件时,,程序会有一个进度条显示..但这个进度条,,有时能显示,但不刷新...有时根本上是显示不出来,要等到删除操作完成后才能显示出来...
我想让这两个操作同时进行....请对gtk2里的多线程编程熟悉的大侠告知一二,,
谢谢
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
x11
x11
当前离线
积分
2823
IP卡
狗仔卡
发表于 2004-7-16 11:36:52
|
显示全部楼层
pthread不能满足你的要求么
回复
支持
反对
使用道具
举报
显身卡
lucifer
lucifer
当前离线
积分
750
IP卡
狗仔卡
发表于 2004-7-16 14:56:22
|
显示全部楼层
看起来是同步有问题
回复
支持
反对
使用道具
举报
显身卡
zhong
zhong
当前离线
积分
1762
IP卡
狗仔卡
楼主
|
发表于 2004-7-16 16:17:42
|
显示全部楼层
....................
我是对多线程编程一点也不通..........
回复
支持
反对
使用道具
举报
显身卡
lonecat
lonecat
当前离线
积分
403
IP卡
狗仔卡
发表于 2004-7-17 00:28:08
|
显示全部楼层
那你首先要搞明白什么是线程,怎么创建a线程等最基本概念。
然后,对于GTK,多个线程不能同时访问界面元素,要保证同时只有一个线程访问界面,最简单的办法就是只在主线程中更新界面,如果其它的线程也需要更新界面,则实用idle_add,让主线程在空闲时执行相应的方法。
多线程的程序设计是一个基本的概念,只不过如果你实用了GTK,则需要遵守一些GTK自己的规定。
回复
支持
反对
使用道具
举报
显身卡
zhong
zhong
当前离线
积分
1762
IP卡
狗仔卡
楼主
|
发表于 2004-7-18 03:23:42
|
显示全部楼层
我只想,,用一个进度条显示程序操作完成的进度..操作完成后进度条自动关闭,,应该是很简单的了...
哈....我看多点资料再说吧
回复
支持
反对
使用道具
举报
显身卡
chice
chice
当前离线
积分
64
IP卡
狗仔卡
发表于 2004-7-18 06:53:42
|
显示全部楼层
资料却是难找。我找了好久才把我的程序调通。
大体如下:
main()
{
...
g_thread_init(NULL);
gdk_threads_init();
add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");
create_window_main();
gtk_widget_show(window_main);
.....
}
线程中如果需要更新界面,要用到
if(pthread_self() != global_main_thread.thread) //如果不是主线程才可以加锁。否则会死锁
if(g_mutex_trylock (gdk_threads_mutex)) //试图加锁,如果不成功,则线程以后的代码就不要更新UI了。否则必死。
can_refresh = TRUE; //成功加锁,可以更新
if(can_refresh) 可以更新界面了。
else 放弃更新。GTK会自动处理的。
处理完成后:
if(can_refresh)
gdk_threads_leave(); //其实就是释放 gdk_threads_mutex
回复
支持
反对
使用道具
举报
显身卡
wide288
wide288
当前离线
积分
2736
IP卡
狗仔卡
发表于 2004-7-18 08:16:55
|
显示全部楼层
我主页上的程序用到了多线程,可以看看代码。
不过还是有警告的,我也正在找问题和解决办法,
ibm 主页上有宋国伟写的多线程例程,也进行了讲解。
回复
支持
反对
使用道具
举报
显身卡
zhong
zhong
当前离线
积分
1762
IP卡
狗仔卡
楼主
|
发表于 2004-7-18 14:36:16
|
显示全部楼层
gnome里的FileRoller和grip都实现得很好......
一边后台操作一面进度条提示....
只是看不明白其中
谢谢楼上的老兄...
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表