안녕하세요!XPending주기가 CPU를 100 %로 만들고 있습니다
xlib 프로젝트를 만드는 데 약간의 문제가 있습니다. 여기 내 프로젝트의 구조 : 사용자가 어떤 버튼을 누르면
[ Init ]
[ Making some stuff ]
[ Creating a timer thread (see code below) ]
[ Main cycle (see code below) ]
, 나는 사실 같은 값으로 스레드에서 플래그를 설정하고 창에 매 n 시간을 CUSTOMMESSAGE를 전송하기 시작합니다.
while (warehouse.destroyflag != SML_DEAD)
{
if (XPending(warehouse.display))
{
XNextEvent(warehouse.display, &event);
그러나 여기에 문제의 비트가있다. 메인 사이클의 현재 실현에 나는 약 100 % CPU 부하을 가지고 있습니다. 그러나 코드에서 XPending 줄을 제거하면로드가 거의 0 %가됩니다. 하지만이 경우에는 다른 스레드에서 올바른 CustomMessage가 도착하지 않습니다.
나는 Xlib 프로그램의 샘플 코드를 찾아 컴파일했다. 그것은 동일한 문제를 가지고 CPU 부하는 약 100 %입니다. 여기
http://paste.bradleygill.com/index.php?paste_id=4897
내 스레드의 코드입니다 : 여기 http://paste.bradleygill.com/index.php?paste_id=4898그리고 내 사이클 : http://paste.bradleygill.com/index.php?paste_id=4899
내가 GTK + 프로젝트 코드를 읽고가 가지고있는 발견 여기에 샘플입니다 매우 비슷한 사이클이지만 GTK + 애플리케이션의 경우 100 % CPU로드가 있다는 것을 알 수는 없습니다.
답변 해 주셔서 감사합니다.
Q : 당신이 만약 (XPending (warehouse.display)> 0 '으로 변경하는 경우는 동일하게 동작 하는가) {...}'? – paulsm4
예, 그대로 유지됩니다 –
해결책을 찾아 냈습니다. 게시물 수정, 감사합니다! –