/*
* threeProc.c
* SystemMonitor
* Created on: 2012-2-22
* Author: zhushengben
* Create threee processes ,
* Each process have it's own window , and just simply show a lab
* All the processes are synchronic.
* Authored by ZhuShengben hust
* 2012.2.14
*/
#include <stdio.h>
#include <unistd.h>
#include <gtk/gtk.h>
#include "proBar.h"
#include "showImage.h"
/*
* 如果你的 "delete_event" 信号处理函数返回 FALSE,GTK 会发出 "destroy" 信号。
*/
gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
/* 打印信息 */
// g_print("delete event occurred\n");
gtk_main_quit();
// return (TRUE);
}
/* destroy a window
* 另一个回调函数 */
void destroy(GtkWidget *widget, gpointer data)
{
gtk_main_quit();
}
void initProcWind(int argc, char *argv[], char *pst)
{
/* GtkWidget 是构件的存储类型 */
GtkWidget * window;
GtkWidget *vbox;
/* 这个函数在所有的 GTK 程序都要调用。参数由命令行中解析出来并且送到该程序中*/
gtk_init(&argc, &argv);
/* Create a new window */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/*
* 当窗口收到 "delete_event" 信号 (这个信号由窗口管理器发出,通常是“关闭”
* 选项或是标题栏上的关闭按钮发出的),我们让它调用在前面定义的 delete_event() 函数。
* 传给回调函数的 data 参数值是 NULL,它会被回调函数忽略。
*/
gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(
delete_event), NULL);
/* G_CALLBACK (delete_event), NULL); */
/*
* 在这里我们连接 "destroy" 事件到一个信号处理函数。
* 对这个窗口调用 gtk_widget_destroy() 函数或在 "delete_event" 回调函数中返回 FALSE 值
* 都会触发这个事件。
*/
gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(destroy),
NULL);
/* 容器 */
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
createProgressBar(vbox, FALSE, FALSE);
/* 最后一步是显示新创建的窗口 */
gtk_widget_show(window);
/* 所有的 GTK 程序必须有一个 gtk_main() 函数。程序运行停在这里
* 等待事件 (如键盘事件或鼠标事件) 的发生。*/
gtk_main();
}
int main(int argc, char *argv[])
{
int pid_1, pid_2;
/* 创建子进程直到创建成功 */
while ((pid_1 = fork()) == -1)
;
/* 处理创建的第一个子进程 */
if (pid_1 == 0)
{
initProcWind(argc, argv, "I'm the first sonProc");
}
/* 处理父进程 */
else
{
/* 创建第二个子进程直到成功 */
while ((pid_2 = fork()) == -1)
;
/* 处理第二个子进程 */
if (pid_2 == 0)
initProcWind(argc, argv, "I'm the second sonProc");
else
{
/* 创建第二个子进程直到成功 */
while ((pid_2 = fork()) == -1)
;
/* 处理第二个子进程 */
if (pid_2 == 0)
initProcWind(argc, argv, "I'm the second sonProc");
else
{
/* 处理父进程 */
showImage(argc, argv);
}
}
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
前往页