2015-09-29 21 views
0

我試圖簡單地使用pthread運行兩個ncurse窗口。我寫的代碼如下:如何使用pthread運行多個ncurses窗口

#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); 

} 

現在的問題是我不能並行運行。這兩個窗口將顯示意想不到的輸出。任何人都可以請幫我找出我的代碼中的問題。

+0

歡迎堆棧溢出。 –

+1

是爲c或C++還是兩者兼而有之? –

+0

我只在c試過。 – Chinnu

回答

0

我想你必須在源代碼中包含#include ncurses.h?

聲明struct winsize w;似乎創建一個類型不完全

可變標誌未在功能createWin1()

嘗試的範圍內聲明的粘貼如果可能的話

我已經包括面板的錯誤的整個代碼。^h

我現在已經與我的openSUSE的一個問題,我發現了一些人同樣的問題,所以我正在尋找的是,我的意思是關於包括panel.h

錯誤「行」未聲明在這個範圍 in win1 = newwin(w.ws_row-row

我試圖找到你用於變量w「ws_row-row」的參數是否正確,嘗試搜索WINDOW結構的內容?

我認爲你必須有良好的價值觀

WINDOW *贏=爲newwin(nlines,NCOLS,Y0,X0)correctely定義爲newwin;在我的身邊 http://hughm.cs.ukzn.ac.za/~murrellh/os/notes/ncurses.html#window

仍然四大誤區

主要有返回值,我宣佈它INT爲主,而我回零,編譯器抱怨說

有關於轉換的一些錯誤在pthread_create

您的功能必須要宣佈無效* createWin1(無效*) ,而不是無效createWin1(無效)

你有什麼組合物1錯誤在你身邊?

我是想幫你,我不是一個關於ncurses的

現在編譯正常,但我有鏈接錯誤 未定義的引用爲newwin專家.....

這是一個庫問題,認爲我們不遠處:https://github.com/mariostg/nffm/issues/2

我使用g ++ -pthread test.c的現在,我w'll再看看tomorow

+0

您可以請告訴我如何使用pthread並行運行兩個啓動窗口 – Chinnu

+0

您是否安裝了ncurses庫? – Chinnu

0

該方法在示例代碼中使用不能可靠地工作,因爲編譯curses使用靜態/全局變量。您可以設置互斥體大約 ncurses調用(以確保來自一個線程的輸入或輸出是單獨的與其他),或者編譯(只有很少的程序包)具有基本線程支持的版本作爲起點。

在ncurses的常見問題,開始與Why does (fill in the blank) happen when I use two threads?