2015-06-20 38 views
2

我剛剛使用C中的圖形開始,並運行一個簡單的程序,吸引了同心圓,而我遇到這個錯誤:與圖形C程序被中止,即使XInitThreads被稱爲

用戶@用戶:〜 /文檔/ C $ GCC circle.c -lX11 -lgraph

用戶@用戶:處理〜/文檔/ C $ ./a.out

[XCB]未知序列號隊列 [XCB大多數可能這是一個多線程客戶端,並且XInitThreads尚未被調用

[xcb]墮胎,對此感到遺憾。 a.out:../../src/xcb_io.c:274:poll_for_event:聲明'!xcb_xlib_threads_sequence_lost'失敗。

中止(核心轉儲)

用戶@用戶:處理隊列〜/文檔/ C $ [XCB]未知序列號

[XCB]最有可能的,這是一個多線程客戶端和XInitThreads尚未被稱爲

[xcb]正在中止,對此抱歉。 a.out:../../src/xcb_io.c:274:poll_for_event:斷言`!xcb_xlib_threads_sequence_lost'失敗。

我查閱了一些論壇,在互聯網上,他們建議增加#include<X11/Xlib.h>並在main()開始就解決問題調用XInitThreads(),但運行時我仍然得到同樣的錯誤。 我已經附加代碼:

#include<stdio.h> 
#include<graphics.h> 
#include<X11/Xlib.h> 
int main() 
{ 
XInitThreads(); 
int gd=DETECT, gm,r,x; 
initgraph(&gd,&gm,NULL); 

setbkcolor(WHITE); 
setcolor(BLACK); 
for(r=10;r<100;r+=10) 
{ 
    circle(150,150,r); 
} 
scanf("%d",&x); 
closegraph(); 

return 0;`}` 

我使用Ubuntu 14.04和GCC編譯。

+0

這可能會有所幫助: https://cgit.freedesktop.org/xorg/lib/libX11/tree/src/xcb_io.c#n212事件隊列的 所有權(如果你的庫使用XCB)是必需的,並且如果其他線程持有它,則可能是此錯誤的一個可能原因。 – GoofyBall

回答

0

沒有太多的答案能解決它,因爲它更像是一種建議。

我一直在可能每個網站都包含教程和「解決方案」。我沒有想到。

我只是建議找到另一種繪圖方式,因爲我自己還沒有找到解決同一問題的方法。即使畫一條簡單的線條也會導致程序崩潰,並且不接受任何輸入或產生輸出。供參考:

#include <stdio.h> 
#include <graphics.h> 
#include <X11/Xlib.h> 

int main() { 
    XInitThreads(); 
    int x1 = 200, y1 = 200; 
    int x2 = 300, y2 = 300; 

    int gd = DETECT, gm; 

    initgraph(&gd, &gm, NULL); 
    delay(2); 
    line(x1, y1, x2, y2); 

    delay(5000); 
    int i = 0; 
    while(i < 100){ 
     printf("testmeplz"); 
     i++; 
    } 
    closegraph(); 
    return 0; 
} 

編譯時:GCC mainprogram.c -o MainProgram(主程序)-Wall -lgraph

如果有任何人知道如何解決這個問題,請在報告

1

添加以下。在closegraph()之前致電;

wait_for_char();

其中:

void wait_for_char() 
{ 

    //Wait for a key press 
    int in = 0; 

    while (in == 0) { 
     in = getchar(); 
    } 
} 

這解決了問題,而不必調用XInitThreads()。 不要問我爲什麼。但我仍然使用wait_for_key()給我時間看!