如何使用pthread运行多个ncurses窗口
我试图使用pthread简单地运行两个ncurse窗口。我写的代码如下:如何使用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(
#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库??