2013-08-07 1 views
1

그래서 다음 코드를 가지고 있습니다. 어쨌든 컨텍스트를 너무 많이/조금 추가했는지는 알 수 없습니다.이상한 엉덩이 XLib 버그; XDrawString은 잠자기 후에 만 ​​작동합니다.

Window root = XCreateWindow(proc->display,  
          RootWindow(proc->display, screen), 
          0, 0, width + 500, height + 500, 0, 
          CopyFromParent, InputOutput, 
          CopyFromParent, CWEventMask, &attr); 

XSetWindowBackground(proc->display, root, WhitePixel(proc->display, screen)); 

XFlush(proc->display); 
XMapWindow(proc->display, root); 

Window avaliableDevices = XCreateSimpleWindow(proc->display, root, 10, 50, 
      220, 650, 5, BlackPixel(proc->display, screen), 
      WhitePixel(proc->display, screen)); 

XFlush(proc->display); 
XMapWindow(proc->display, avaliableDevices); 

sleep(1); 
XDrawString(proc->display, root, DefaultGC(proc->display, DefaultScreen(proc->display)) 
    , 20, 20, "hello", strlen("hello")); 

Window networkedDevices = XCreateSimpleWindow(proc->display, root, /* display, parent */ 
      900, 50, /* x, y: the window manager will place the window elsewhere */ 
      220, 650, /* width, height */ 
      5, BlackPixel(proc->display, screen), /* border width & colour, unless you have a window manager */ 
      WhitePixel(proc->display, screen)); /* background colour */ 

XDrawString(proc->display, root, DefaultGC(proc->display, DefaultScreen(proc->display)) 
    , 920, 40, "NETWORKED DEVICES", strlen("NETWORKED DEVICES")); 

내가 겪고있는 문제는 잠자기 (1)이 없으면 문자열이 화면에 그려지지 않을 것이고, 왜 어떤 아이디어로 혼란 스럽습니까?

내가 호출 처음이 잠을 필요로하지만 두 번째 시간은 괜찮 :/

답변

0

그것은 thisthis의 또 다른 변화 될 것으로 보인다.

이벤트가 제대로 플러시되지 않는 것처럼 보이면 수면은 이벤트가 발생하는 시간을줍니다.

좀 더 제어 된 방식으로 수행하려면 노출 이벤트를 기다립니다.

교체 sleep과 :

XSelectInput(proc->display, root, ExposureMask); 
XEvent ev; 
XNextEvent(proc->display, &ev); 
관련 문제