Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在事件驱动的X-lib程序中引入可实现的延迟?_C_Graphics_X11_Xlib_Xserver - Fatal编程技术网

C 如何在事件驱动的X-lib程序中引入可实现的延迟?

C 如何在事件驱动的X-lib程序中引入可实现的延迟?,c,graphics,x11,xlib,xserver,C,Graphics,X11,Xlib,Xserver,我正在编写一个X-server显示代码来显示球从一个像素位置到下一个位置的移动,在执行以下代码后打开的新窗口中可以看到。在运行代码时,我可以得到5个红色填充的圆圈,它们被认为是球。代码可以运行得非常快,实时计算就像2-3毫秒,这是显而易见的,在窗口上所有的5个球同时显示 我想在两者之间引入一些延迟,这样我就可以看到球从一个像素位置移动到另一个像素位置。为此,我应该向给定的代码中添加什么?我希望有某种计时器或中断,以便在一段时间内停止执行,同时从一个地方切换到另一个地方,并且可以在窗口中看到 代码

我正在编写一个X-server显示代码来显示球从一个像素位置到下一个位置的移动,在执行以下代码后打开的新窗口中可以看到。在运行代码时,我可以得到5个红色填充的圆圈,它们被认为是球。代码可以运行得非常快,实时计算就像2-3毫秒,这是显而易见的,在窗口上所有的5个球同时显示

我想在两者之间引入一些延迟,这样我就可以看到球从一个像素位置移动到另一个像素位置。为此,我应该向给定的代码中添加什么?我希望有某种计时器或中断,以便在一段时间内停止执行,同时从一个地方切换到另一个地方,并且可以在窗口中看到

代码:


}

在XNextEvent之前,在XConnectionNumberdpy上调用select并指定所需的超时时间,.Hi n.m.,在每次像素打印后只需调用XFlush和sleep即可。在每次循环迭代中使用usleep
#include <stdio.h>
#include <X11/Xlib.h>
#include <math.h>
 Display *display;
 Window  window;
 XSetWindowAttributes attributes;
 XGCValues gr_values;
 XFontStruct *fontinfo;
 GC gr_context;
 Visual *visual;
 int depth;
 int screen;
 XEvent event;
 XColor    color, dummy;

 main (argc, argv)
 char   *argv[];
 int     argc;
  { 
  display = XOpenDisplay(NULL);
  screen = DefaultScreen(display);
  visual = DefaultVisual(display,screen);
  depth  = DefaultDepth(display,screen);
  attributes.background_pixel = XWhitePixel(display,screen);

  window = XCreateWindow( display,XRootWindow(display,screen),
                        200, 200, 750, 200, 5, depth,  InputOutput,
                        visual ,CWBackPixel, &attributes);
  XSetStandardProperties(display,window,"Welcome","Hi",None,NULL,0,NULL);
 XSelectInput(display,window,ExposureMask | KeyPressMask) ;
 fontinfo = XLoadQueryFont(display,"6x10");

 XAllocNamedColor(display, DefaultColormap(display, screen),"red",
                  &color,&dummy);

 gr_values.font = fontinfo->fid;
 gr_values.foreground = color.pixel;

 gr_context=XCreateGC(display,window,GCFont+GCForeground, &gr_values);
 XFlush(display);
 XMapWindow(display,window);
 XFlush(display);
 int i,j,a,a1,a2,a4,a5,b1,b2,b4,b5,b,h,w,angle1,angle2;
 while(1){
    XNextEvent(display,&event);

    switch(event.type){
    case Expose:
 //Make a circle using arc, and then fill it with a color

    a = 200; a1=520; a2=750;a4=400;a5=1050;
    b = 200;b1=100; b2=300;b4=400;b5=500;
    h = 10, w = 10;
    angle1 = 0, angle2 = 360*64;

//Some delay I may need to introduce here ??

 XFillArc(display, window, gr_context, a-(w/2), b-(h/2), w, h, angle1, angle2);

      XFillArc(display, window, gr_context, a1-(w/2), b1-(h/2), w, h, angle1, angle2);

     XFillArc(display, window, gr_context, a2-(w/2), b2-(h/2), w, h, angle1, angle2);

      XFillArc(display, window, gr_context, a4-(w/2), b4-(h/2), w, h, angle1, angle2);

      XFillArc(display, window, gr_context, a5-(w/2), b5-(h/2), w, h, angle1, angle2);
break;

    case KeyPress: 
         XCloseDisplay(display); 
         exit(0);

    }
 }