当前位置:  技术问答>linux和unix

信号通讯方式curses窗体刷新怪异问题!!!

    来源: 互联网  发布时间:2016-05-20

    本文导语:  程序中父子进程分别在自己的一个窗体中显示,第一次按tab键可以从父进程窗体切换到子进程窗体,再次按下tab键之后,程序已经且到父进程窗体,但是没有刷新出父进程窗口以前输入的东西。请问是怎么回事?是不...

程序中父子进程分别在自己的一个窗体中显示,第一次按tab键可以从父进程窗体切换到子进程窗体,再次按下tab键之后,程序已经且到父进程窗体,但是没有刷新出父进程窗口以前输入的东西。请问是怎么回事?是不是跟父子进程通过信号通讯有关,我去掉信号写的测试程序都可以相互之间切换啊?
   代码如下:
#include 
#include 
#include 
#include 


void initcurses();
void initwin(WINDOW **wins,int k);
void cov(WINDOW **win,int i,int ch);
void tell_wait();
void wait_child(void);
void wait_parent(void);
void tell_child(pid_t pid);
void tell_parent(pid_t pid);
void sig_usr(int signo);

static volatile sig_atomic_t sigflag;
static sigset_t newmask, oldmask, zeromask;


main()
{
    int ch,i=1,j =0 ,k=2;
    int start=0;
    int exit=0;
    WINDOW *wins[2];
    pid_t pid;

    initcurses();
    initwin(wins,k);
    box(wins[0],'.',',');
    box(wins[1],'!','#');
    touchwin(wins[0]);
    wrefresh(wins[0]);

    tell_wait();
    while (ch = wgetch(wins[0]))
    {
        switch(ch)
       {
            case 'q':
                  exit = 1;
                  break;
            case 9:
               if (0 == start)    //第一次切换
                 {
                    if ((pid = fork()) == 0)    //子进程
                       {
                          touchwin(wins[1]);
                          wrefresh(wins[1]);
                          while(ch = wgetch(wins[1]))
                            {
                               switch(ch)
                                 {
                                    case 9:
                                        exit = 1;
                                        break;
                                    default:
                                        cov(wins,1,ch);
                                        break;
                                 }
                               if (1 == exit)
                                 {
                                    tell_parent(getppid());
                                    wait_parent();
                                 }
                            }
                       }
                     else if(pid >0)            //父进程
                       {
                          wait_child();
                          start = 1;
                       }
                 }
               else
                 {
                  exit = 1;   // 第二次由父进程切回来自动退出
            }
                 break;
            default:
                 cov(wins,0,ch);
                 break;
        }
        if (1 == exit) break;
        touchwin(wins[0]);
        wrefresh(wins[0]);
mvwaddstr(wins[0],3,4,"222222");
wrefresh(wins[0]);//再次切换到父窗体的时候,会显示22222但是为什么边框仍然为子窗体的边框

     }

   endwin();
}

void initcurses()
{
    initscr();//初始化curses库
    noecho();
    keypad(stdscr,TRUE);
    box(stdscr,'┃','━');
    refresh();
}

void initwin(WINDOW **wins,int k)
{
    int i;

    for(i = 0;i 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 数学、信号处理、通讯类C++库 IT++
  • 父子进程间的信号通讯问题
  • 进入信号处理函数,是不是会自动把进入信号加入信号屏蔽字?还有sigpending
  • 学习linux的新手问:linux进程信号掩码以及信号阻塞与信号未决怎么理解?
  • 关于信号量与UNIX信号的疑问
  • 生产者消费者问题为什么不可以共用一个信号量,如果这个信号量可以设置取值固定为0到N,即当信号量取值为N的时候阻塞进程,是否也可以?
  • 当信号量(灯)遇上信号,help!
  • 请问什么时候发出SIGKILL信号、什么时候发出SIGTERM信号?
  • 安全信号和不安全信号的实现机制有什么不同么?
  • 如何确定信号的来源?即如何知道接收到的信号来自于哪一个进程号?
  • 自旋锁和读写自旋锁、信号量和读写信号量分别有什么区别?
  • 关于消息队列信号量信号共享内存等核心编程的问题(求知若渴!!!.....)
  • 可靠信号和不可靠信号的问题
  • semaphore.h sem.c Posix 信号量 System v 信号量
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • 信号可靠还是不可靠,取决与信号本身还是signal()/sigaction()的区别?
  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • 终端被关闭后,bash收到哪些信号,这些信号是怎么来的?
  • 书上说,中断用自旋锁,进程,用信号量,但是,为什么中断不能用信号量?
  • linux 中信号量的使用 当信号初始化的时候设置的值大于1将是如何?
  • 大侠们求指导,电信骨干网光纤信号分流成多个千兆网信号
  • 32号信号和33号信号哪里去拉?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3