GTK:g_timeout_add()Raspberry Pi

时间:2018-09-13 05:29:54

标签: raspberry-pi gtk3

以下代码在我测试过的几乎Linux平台(Ubuntu,Mint,Raspbian x86)上都能完美执行,但在Raspbian for Raspberry Pi上完全失败。

它成功地随机执行了几次,然后停止触发。该程序的其余部分可以很好地执行,包括以完全相同的方式添加的其他几个超时,并且没有其他任何明显的影响。

树莓派不能跟上5毫秒的超时时间吗?为什么只有一个方面失败了,而其他所有方面都没有出现故障等呢?这就像是由于某种原因而取消了超时一样。

void control_init() {

...

  g_timeout_add(20, control_quick_timer_event, NULL);

...

}



void control_quick_timer_event() {

  control_read_values();

  control_since_last++;

  if (control_since_last == 2) {

    while (serialDataAvail(control_serial)) {

      serialGetchar(control_serial);

    }

    control_read_state = -1;
  }
}

*编辑* 一个额外的printf(“ \ n”);出于未知原因“修复”了该问题,但是我不能接受它作为解决方案,因为我需要串行打印而没有数百万个空格。

返回True; /返回1;在尾部也会导致相同的错误,这对结果没有影响。

1 个答案:

答案 0 :(得分:1)

我怀疑这是因为您的处理程序返回了void。来自g_timeout_add

  

该函数被反复调用,直到返回FALSE,此时   点超时将被自动销毁,该功能将不会   被再次呼叫。

#include <gtk/gtk.h>

gboolean control_quick_timer_event(gpointer data)
{
    printf("I'm still alive\n");
    return TRUE;
}

int main (int argc, char *argv[])
{
    gtk_init (&argc, &argv);
    g_timeout_add(20, control_quick_timer_event, NULL);
    gtk_main ();
    return 0;
}