LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1140|回复: 10

linux 中多线程的问题???????

[复制链接]
发表于 2005-11-8 16:17:44 | 显示全部楼层 |阅读模式
在g t k 编程中需要创建一个独立的线程来执行一些事情,在其中用到了system ()命令,本来的思想是只阻塞当前的线程,即新创建的线程,可是主线程却也停止了.求解决方法.
 楼主| 发表于 2005-11-8 16:25:16 | 显示全部楼层
代码是这样的

void *music_cycle(void *data){
....
....
....
system("mplayer /data/music/beijixue.mp3");//就阻塞在这里了
}


gboolean
on_win_MAIN_key_press_event(GtkWidget * widget, GdkEventKey * event,
                            gpointer user_data)
{
....
....
pthread_t pthread_xy;
        ret = pthread_create(&pthread_xy, NULL, music_cycle, NULL);//创建线程
        printf ("after pthread create\n");
....
....
}
gthread 我也试过,就是不过,55555555~~~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2005-11-8 16:37:27 | 显示全部楼层
system是调用shell,当然阻塞了,你可以自己fork一个进程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-8 17:01:31 | 显示全部楼层
能详细解释一下么,我看了system() 文档,他是自己创建一个子进程来执行const *char ,就算我再创建一个进程,觉得没有什么意义,呵呵不懂,求祥解
回复 支持 反对

使用道具 举报

发表于 2005-11-9 09:41:07 | 显示全部楼层
haohao_h


这个怎么说呢,我不是很明白哦,难道用system()调用 的话,所在线程就一定阻塞吗!
回复 支持 反对

使用道具 举报

发表于 2005-11-9 10:22:06 | 显示全部楼层
Post by newroot
haohao_h


这个怎么说呢,我不是很明白哦,难道用system()调用 的话,所在线程就一定阻塞吗!

The system() function causes string to be given to the shell
     as input, as if string had been typed as a command at a ter-
     minal. The invoker waits until the shell has completed, then
     returns the exit status of the shell in the format specified
     by waitpid(2).
回复 支持 反对

使用道具 举报

发表于 2005-11-9 10:43:18 | 显示全部楼层
试试用 exec{v,p}之类的函数
回复 支持 反对

使用道具 举报

发表于 2005-11-9 14:16:20 | 显示全部楼层
这是多进程问题,没有用到多线程

答案已经很明了了
回复 支持 反对

使用道具 举报

发表于 2005-11-10 00:42:57 | 显示全部楼层
老大,创建线程是用pthread_create, 你调用的SYSTEM(),FORK()等是调了另一个进程,你究竟想创建一个线程还是进程呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-10 10:30:43 | 显示全部楼层
最后我还是单独做了一个模块,让system 来调用,线程这么用的确是不行,谢谢,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表