我的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秒钟?
答案 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 timeval
或struct timespec
结构。我不会在我的例子中使用它们来保持清晰。