如何使用pthread运行多个ncurses窗口

如何使用pthread运行多个ncurses窗口,c,pthreads,ncurses,C,Pthreads,Ncurses,我试图使用pthread简单地运行两个ncurse窗口。我写的代码如下: #include<stdio.h> #include<pthread.h> #include<ncurses.h> #include<sys/ioctl.h> #include<string.h> #include<unistd.h> struct winsize w; WINDOW *win1,*win2; void createWin1(

我试图使用pthread简单地运行两个ncurse窗口。我写的代码如下:

#include<stdio.h>
#include<pthread.h>
#include<ncurses.h>
#include<sys/ioctl.h>
#include<string.h>
#include<unistd.h> 

 struct winsize w;
 WINDOW *win1,*win2;
 void createWin1(void){
       while(1){

                char  buffer[1024];
                win1=newwin(0,0,40,50);      
                box(win1,0,0); 
                wrefresh(win1); 
                sleep(1);
            }
}     
void createWin2(void){
          while(1){
                   win2=newwin(40,50,40,60);
                   box(win2,0,0);
                   wrefresh(win2);
                   sleep(1);
                  }
    }
void main()
  {    initscr();
       noecho();
       cbreak();
       start_color();
       use_default_colors();
       init_pair(1,COLOR_WHITE, -1);              
       pthread_t p1,p2;       
       pthread_create(&p1,NULL,(void *)createWin1,NULL);    
       pthread_create(&p2,NULL,(void *)createWin2,NULL);
       pthread_join(p1,NULL);
       pthread_join(p2,NULL);

}
#包括
#包括
#包括
#包括
#包括
#包括
结构winsize w;
窗口*win1,*win2;
void createWin1(void){
而(1){
字符缓冲区[1024];
win1=newwin(0,0,40,50);
box(win1,0,0);
wrefresh(win1);
睡眠(1);
}
}     
void createWin2(void){
而(1){
win2=newwin(40,50,40,60);
box(win2,0,0);
wrefresh(win2);
睡眠(1);
}
}
void main()
{initscr();
noecho();
cbreak();
启动颜色();
使用默认颜色();
初始对(1,颜色为白色,-1);
pthread_t p1,p2;
pthread_create(&p1,NULL,(void*)createWin1,NULL);
pthread_create(&p2,NULL,(void*)createWin2,NULL);
pthread_join(p1,NULL);
pthread_join(p2,NULL);
}

现在的问题是我不能并行运行两个窗口。这将显示意外的输出。谁能帮我找出代码中的问题。

我想你必须在源代码中包含#include ncurses.h

声明结构winsize w;似乎创建了一个不完整的类型

变量标志未在函数createWin1()的作用域中声明

如果可能,尝试粘贴整个代码

我把panel.h包括在内有一个错误

我的opensuse现在有一个问题,我发现一些人有同样的问题,所以我正在寻找,我的意思是包括panel.h

未在此范围中声明错误“行” 在win1中=newwin(w.ws_row-row

我正在尝试查找您用于变量w“ws_row-row”的参数,是否正确,尝试搜索窗口结构的内容

我认为你必须用良好的价值观正确地定义newwin

窗口*win=newwin(nlines,ncols,y0,x0);

我这边还有四个错误

main必须返回一个值,我声明它为int main,我返回零,编译器对此表示不满

pthread_create中的转换有一些错误

您的函数必须声明为void*createWin1(void*) 而不是无效createWin1(无效)

你这边有没有编译错误

我是想帮你我不是网络课程专家

现在编译还可以,但是我有链接器错误 未定义对newwin的引用

这是图书馆的问题,我想我们离:


现在我用g++-pthread test.c编译,明天我再看一遍。我想你必须在源代码中包含35; include ncurses.h

声明结构winsize w;似乎创建了一个不完整的类型

变量标志未在函数createWin1()的作用域中声明

如果可能,尝试粘贴整个代码

我把panel.h包括在内有一个错误

我的opensuse现在有一个问题,我发现一些人有同样的问题,所以我正在寻找,我的意思是包括panel.h

未在此范围中声明错误“行” 在win1中=newwin(w.ws_row-row

我正在尝试查找您用于变量w“ws_row-row”的参数,是否正确,尝试搜索窗口结构的内容

我认为你必须用良好的价值观正确地定义newwin

窗口*win=newwin(nlines,ncols,y0,x0);

我这边还有四个错误

main必须返回一个值,我声明它为int main,我返回零,编译器对此表示不满

pthread_create中的转换有一些错误

您的函数必须声明为void*createWin1(void*) 而不是无效createWin1(无效)

你这边有没有编译错误

我是想帮你我不是网络课程专家

现在编译还可以,但是我有链接器错误 未定义对newwin的引用

这是图书馆的问题,我想我们离:


我现在使用g++-pthread test.c编译,我将再次查看Row

示例代码中使用的方法无法可靠地工作,因为curses使用静态/全局变量。您可以在ncurses调用周围设置互斥体(以确保一个线程的输入或输出与其他线程分开),也可以编译(很少有包)以基本线程支持为起点的版本


在ncurses常见问题解答中,从示例代码中使用的方法开始,因为curses使用静态/全局变量,因此无法可靠地工作。您可以围绕ncurses调用设置互斥体(以确保一个线程的输入或输出与其他线程分开),也可以编译(很少有包)以基本线程支持为起点的版本


在NFCIES FAQ中,从

开始,欢迎使用堆栈溢出。是针对C或C++还是两个线程?NCRESS不是多线程的简单。有一些基本的文档支持;如果安装了NcRISS MANPUTS,请尝试<代码> man CursSyths< <代码>或<代码> man线程< /Cord>或在线阅读,欢迎访问堆栈溢出。F是F吗?如果你安装了NcRISS手册,请尝试<代码> man CursSyths> <代码>或<代码> man线程< /C++ >或者在网上阅读,请告诉我如何使用已安装的NTHEXT安装并行运行两个N诅咒窗口。库??您能告诉我如何使用pthread并行运行两个ncurse窗口吗?您是否安装了ncurses库??