QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1253|回复: 4

急!!!关于GTK编程的问题!

[复制链接]
发表于 2006-2-6 17:01:28 | 显示全部楼层 |阅读模式
请教诸位高手:
   我的一个运行在DVR(硬盘录像机)上的gtk程序,其中一个按钮
的回调函数fork一个子进程然后exec另一个gtk程序。可是点击此按钮
没有反应。是什么原因?
   难道是连接X Server错误?一个display是否可以同时连接多个
client?我想应该可以的吧。
   能否将父进程中的display ID传给子进程,子进程利用此ID创建
主窗口。这样做的时候是否应该不执行gtk_init函数?
发表于 2006-2-7 17:59:29 | 显示全部楼层
http://mail.gnome.org/archives/gtk-list/1999-September/msg00498.html
回复

使用道具 举报

发表于 2006-2-7 18:09:30 | 显示全部楼层
这个简单点,但不知道有没有问题。
[code:1]
#include <gtk/gtk.h>
#include <sys/types.h>
#include <unistd.h>

void btn_callback(GtkWidget *widget, gpointer data)
{
    pid_t pid;
    pid = fork();
    if(pid == -1)
        exit(-1);
    else if(pid ==0)
    {
        execlp("gtk-demo","gtk-demo",NULL);
    }
    else
        return;
}

main()
{
    GtkWidget *win;
    GtkWidget *btn;
    gtk_init(NULL,NULL);
    win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    btn = gtk_button_new_with_label("do fork");
    gtk_container_add(GTK_CONTAINER(win),btn);
    gtk_widget_set_usize(win,300,300);
    gtk_widget_show_all(win);
    gtk_signal_connect(btn,"clicked",btn_callback,NULL);
    gtk_signal_connect(win,"destroy",gtk_main_quit,NULL);
    gtk_main();
}


[/code:1]
回复

使用道具 举报

发表于 2006-2-7 22:28:08 | 显示全部楼层
能否将父进程中的display ID传给子进程,子进程利用此ID创建
主窗口。这样做的时候是否应该不执行gtk_init函数?

应该不行吧,进程间的空间是独立的,怎么能直接访问?
回复

使用道具 举报

发表于 2006-2-7 22:43:01 | 显示全部楼层
不过可以根据窗口ID将一个窗口嵌入到另外一个窗口里,两个窗口可以是不同进程。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 22:25 , Processed in 0.056968 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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