找回密码
 注册
查看: 572|回复: 2

高手请进,这个问题把我急死了

[复制链接]
发表于 2004-6-24 20:25:54 | 显示全部楼层 |阅读模式
#include <unistd.h>
#include <curses.h>
#include <sys/types.h>
int main(void)
{
        pid_t sub_pid1,sub_pid2;
        int        i,j,k,per_sub_1,per_sub_2,per_father;
        per_sub_1=per_sub_2=per_father=0;                                  /*进程运行百分比初始化为0*/
        WINDOW        *w1,*w2,*w3;
                 initscr();                         /*初始化屏幕*/
                w1=newwin(5,70,3,5);             /*父进程显示窗口*/
        box(w1,ACS_VLINE,ACS_HLINE);
        init_pair(100,COLOR_RED,COLOR_BLACK);
        wattrset(w1,100);
        for(i=0;i<50;i++)
               {
        mvwprintw(w1,2,(i+7),"%s","$");
        }
        touchwin(w1);
        wrefresh(w1);
                w2=newwin(5,70,10,5);       /*子进程1显示窗口*/
        box(w2,ACS_VLINE,ACS_HLINE);
        init_pair(200,COLOR_GREEN,COLOR_BLACK);
        wattrset(w2,200);
        for(i=0;i<50;i++)
               {
        mvwprintw(w2,2,(i+7),"%s","$");
        }
        touchwin(w2);
        wrefresh(w2);
                w3=newwin(5,70,17,5);  /*子进程2显示窗口*/
        box(w3,ACS_VLINE,ACS_HLINE);
        init_pair(300,COLOR_BLUE,BLACK);
        wattrset(w3,300);
        for(i=0;i<50;i++)
              {
        mvwprintw(w3,2,(i+7),"%s","$");
        }
        touchwin(w3);
        wrefresh(w3);
                 sub_pid1=fork();/*创建子进程1*/
        if(sub_pid1==0)
        {
          for(i=0;i<50;i++)
        {
                          per_sub_1+=2;            /*子进程1显示窗口的处理*/
        mvwprintw(w2,1,25,"%s","child 1 is running");
        mvwprintw(w2,2,(7+i),"%s","&");
        mvwprintw(w2,2,64,"%d",per_sub_1);
        mvwprintw(w2,2,67,"%s","%");
        touchwin(w2);
        wrefresh(w2);                       
        refresh();
        sleep(1);
        }
        mvwprintw(w2,3,25,"%s","proccess ended");       
        touchwin(w2);
        wrefresh(w2);
        refresh();
        }
        else
        {
        sub_pid2=fork();                           /*创建子进程2*/
        if(sub_pid2==0)
        {
        for(j=0;j<50;j++)       
        {                            /*子进程2显示窗口的处理*/
        per_sub_2+=2;       
        mvwprintw(w3,1,25,"%s","child 2 is running");
        mvwprintw(w3,2,(7+j),"%s","&");
        mvwprintw(w3,2,64,"%d",per_sub_2);
        mvwprintw(w3,2,67,"%s","%");
        touchwin(w3);
        wrefresh(w3);
        refresh();
        sleep(1);
        }
        mvwprintw(w3,3,25,"%s","proccess ended");
        touchwin(w3);
        wrefresh(w3);
        refresh();
        }
        else
        {
        for(k=0;k<50;k++)
        {                   /*父进程即当前正在运行程序的进程*/
        per_father+=2;
        mvwprintw(w1,1,25,"%s","parent is running");
        mvwprintw(w1,2,(7+k),"%s","&");
        mvwprintw(w1,2,64,"%d",per_father)
        mvwprintw(w1,2,67,"%s","%");
        touchwin(w1);
        wrefresh(w1);
        refresh();
        sleep(1);
        }
        mvwprintw(w1,3,25,"%s","proccess ended");
        touchwin(w1);
        wrefresh(w1);
        refresh();
        sleep(5);
        endwin();
        exit(0);
        }
         }               
}
上面是源程序,是用来显示三个进程的,单要用curses.h,但显示窗口颜色与文字有问题,是否未初始化,如果要初始化,如何初始化,请高手指点,小弟在此谢过!!!!
发表于 2004-6-24 21:56:03 | 显示全部楼层
在使用彩色之前要初始化,可以在initscr()后面置一个start_color()语句。

在init_pair()函数中的索引数不能超过63,一般来说按顺序从1开始用,而你的代码中却分别用了100、200和300,而且在进程2中还将COLOR_BLACK误写成BLACK;wattrset()的参数也没用对,它不能直接使用颜色索引,正确的写法如下:
init_pair(1,COLOR_RED,COLOR_BLACK);
wattrset(w1,COLOR_PAIR(1));
当然为了更加美观可以使用亮色即"COLOR_PAIR(1)|A_BOLD"。

代码中倒数第17行语句还少了结尾的分号。
回复

使用道具 举报

 楼主| 发表于 2004-6-24 23:36:59 | 显示全部楼层
多谢高手指点,问题已解决,thx
回复

使用道具 举报

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

本版积分规则

GMT+8, 2025-2-15 13:23 , Processed in 0.022621 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

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