我正在编写一个 C 程序来控制 ARDrone,并且希望无人机只要按下一个键就可以移动,并且当不再按下该键时我希望它停止移动。我将 key_press_event 和 key_release_event 都附加到我创建的窗口中,这是回调函数:
gint key_press_cb(GtkWidget *widget,
GdkEventKey *kevent,
gpointer data)
{
unsigned int key;
int res;
/* While a key is pressed the drone moves,
* when the key is released it is put back into hover mode */
if(kevent->type == GDK_KEY_RELEASE) {
// Hover mode
printf("--- Hover Mode ---\n");
ardrone_at_set_progress_cmd(0, 0, 0, 0, 0);
//res = keyboard_update(BACKSPACE);
} else if(kevent->type == GDK_KEY_PRESS) {
key = kevent->keyval;
g_message("Key pressed: %c [%d]", key, key);
res = keyboard_update(key);
}
return TRUE;
}
如果我按住键短时间,我会得到一个键释放事件,但是当按住它超过 2 秒时,我不会看到键释放事件。我在想这可能是因为我在按住一个键的同时不断收到 key_press_events;有什么办法可以禁用该重复?