【问题标题】:How to run multiple ncurses window using pthread如何使用 pthread 运行多个 ncurses 窗口
【发布时间】:2015-09-29 04:34:43
【问题描述】:

我正在尝试使用 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);

}

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

【问题讨论】:

  • 欢迎堆栈溢出。
  • 是 c 还是 c++ 还是两者兼有?
  • ncurses 多线程并不容易。基本文档有一些基本支持;如果您安装了 ncurses 手册页,请尝试 man curs_threadsman threads 或在线阅读 here

标签: c pthreads ncurses


【解决方案1】:

我认为您必须在源代码中包含#include ncurses.h ?

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

变量标志未在函数createWin1()的范围内声明

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

我在包含 panel.h 时出错

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

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

我正在尝试查找您用于变量 w "ws_row-row" 的参数是否正确,尝试搜索 WINDOW struct 的内容??

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

WINDOW * win = newwin(nlines, ncols, y0, x0); http://hughm.cs.ukzn.ac.za/~murrellh/os/notes/ncurses.html#window

我这边还有四个错误

main 必须返回一个值,我将它声明为 int main,然后我返回零,编译器对此抱怨

pthread_create 中的转换有一些错误

你的函数必须被声明为 void* createWin1(void*) 而不是 void createWin1(void)

您是否有任何编译错误?

我想帮助你,我不是 ncurses 方面的专家

现在编译正常但我有链接器错误 未定义对 newwin 的引用.....

这是一个库问题,认为我们离我们不远:https://github.com/mariostg/nffm/issues/2

我现在用 g++ -pthread test.c 编译,我明天再看看

【讨论】:

  • 你能告诉我如何使用 pthread 并行运行两个 ncurse 窗口
  • 你安装ncurses库了吗??
【解决方案2】:

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

在 ncurses 常见问题解答中,以 Why does (fill in the blank) happen when I use two threads? 开头

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多