禁用排队在C中执行

时间:2017-06-18 22:23:08

标签: c mouseevent x11

我的C睡眠功能有问题。

当我在这个code睡眠功能中使用时:

while(1) {
        XNextEvent(display, &xevent);
        switch (xevent.type) {
            case MotionNotify:
                break;
            case ButtonPress:
                printf("Button click: [%d, %d]\n", xevent.xmotion.x_root, xevent.xmotion.y_root);
                sleep(5);
                break;
            case ButtonRelease:
                break;
        }

它对我来说效果不好因为printf("按钮点击")一直在执行但速度较慢。

如何打印"按钮单击x y"一次并停止聆听点击5秒钟?

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找类似的东西:

/* ignore_click is the time until mouse click is ignored */
time_t ignore_click = 0;

while(1) {
    XNextEvent(display, &xevent);
    switch (xevent.type) {
        case MotionNotify:
            break;
        case ButtonPress:
            {
                time_t now;
                /* we read current time */
                time(&now);

                if (now > ignore_click)
                {
                    /* now is after ignore_click, mous click is processed */
                    printf("Button click: [%d, %d]\n", xevent.xmotion.x_root, xevent.xmotion.y_root);

                    /* and we set ignore_click to ignore clicks for 5 seconds */
                    ignore_click = now + 5;
                }
                else
                {
                    /* click is ignored */
                }
            }
            break;
        case ButtonRelease:
            break;
    }
}

上面写的代码会忽略4到5秒的点击次数:time_t类型是第二个精确结构......

要获得更多精确时间,您可以使用struct timevalstruct timespec结构。我不会在我的例子中使用它们来保持清晰。