2009-09-11 29 views
5

Birçok önemli etkinlik olayını simüle etmek istiyorum. XTestFakeKeyEvent kullanarak bir çözüm buldum, ancak 210 katından daha fazla benzetim yaptığımda, programım "Maksimum istemci sayısına ulaşıldı" segmentasyon hatası oluşturur. Bu sorunu nasıl çözeceğimi bilmiyorum. BuradaYardım: Maksimum müşteri sayısına ulaşıldı - Segmentasyon hatası

Kodum:

#include <X11/Xlib.h> 
#include <X11/keysym.h> 
#include <X11/extensions/XTest.h> 
#include <stdio.h> 

#define PRESS_UP 0 
#define PRESS_DOWN 1 
#define PRESS_LEFT 2 
#define PRESS_RIGHT 3 
#define PRESS_ENTER 4 
#define PRESS_ESC 5 
#define PRESS_HOME 6 

Display *display; 
unsigned int keycode; 

int press(int key){ 
    display = XOpenDisplay(NULL); 

    if(key == PRESS_UP) 
     keycode = XKeysymToKeycode(display, XK_Up); 
    else if(key == PRESS_DOWN) 
     keycode = XKeysymToKeycode(display, XK_Down); 
    else if(key == PRESS_LEFT) 
     keycode = XKeysymToKeycode(display, XK_Left); 
    else if(key == PRESS_RIGHT) 
     keycode = XKeysymToKeycode(display, XK_Right); 
    else if(key == PRESS_ENTER) 
     keycode = XKeysymToKeycode(display, XK_Return); 
    else if(key == PRESS_ESC) 
     keycode = XKeysymToKeycode(display, XK_Escape); 
    else if(key == PRESS_HOME) 
     keycode = XKeysymToKeycode(display, XK_Home); 

    XTestFakeKeyEvent(display, keycode, True, 0); 
    XTestFakeKeyEvent(display, keycode, False, 0); 
    XFlush(display); 
    return 0; 
} 

int main(int argc, char *argv[]){ 
    int count = 0; 
    while (count < 500){ 
     press(PRESS_UP); 
     printf("count =%d\n" ,count); 
     count ++; 
    } 
} 

Çıktı:

$ gcc -lXtst -lX11 Util_KeyPressSimulator.c 
$ ./a.out 
count =0 
^[[Acount =1 
^[[Acount =2 
... 
^[[Acount =208 
^[[Acount =209 
^[[Acount =210 
^[[AMaximum number of clients reachedSegmentation fault 

biri yardım lütfen mu, teşekkür ederiz.

cevap

12

XCloseDisplay eşleşme olmaksızın yineleme başına XOpenDisplay yapıyorsunuz. Ekranı bir kez açıp, main() numaralı telefonun içinde döngü dışında açmayı ve çıkmadan önce kapatmayı düşünün.

+2

Ayrıca, 'XOpenDisplay' başarısız oldu, bu nedenle başarısız olursa, bu istemci çöküyor. – mark4o

İlgili konular