如何使用g_timeout_add?

时间:2015-04-13 07:06:22

标签: c button timeout gtk

我正在使用GTK和Glade在C语言中进行串行通信。我在使用g_timeout_add时遇到问题。例如,我有一个包含我的串行数据的函数serial_data(),我有一个按钮处理程序on_update_button_clicked()。所以到目前为止,如果点击update button,我就会这样做,gtk_timeout应该运行。但它只运行了一次。

on_update_button_clicked(GtkButton *Update_Button)
{
     //2nd argument is serial_data function which contain actual data    
     g_timeout_add(250,serial_data,NULL); 
}

我错过了哪一点?

我有另一个按钮stop button。所以我希望timeout在点击stop button handler时停止。怎么做。??

还有一个问题要问,我想计算timeout像计数器一样运行的次数。这样我就可以显示计数器的数量。这怎么可能。? 请帮助谢谢。

3 个答案:

答案 0 :(得分:1)

g_timeout_add()返回您应存储的事件源ID。您可以在停止按钮处理程序中使用带有该ID的g_source_remove()来停止超时。

答案 1 :(得分:0)

检查开发者网站

https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#g-timeout-add

非常清楚。

您可以gpointergboolean STOP,完成serial_data中的return STOP功能,并stop button更改STOP = FALSE它将停止调用该函数。或类似的东西。

答案 2 :(得分:0)

在文档中,该函数被重复调用,直到返回FALSE 。您可以使用布尔参数调用on_update_button来切换超时调用,使其不再被连续调用,在参数计算为TRUE时将其设置为运行,如果参数为{{ 1}}。这是一个演示:

g_source_remove(threadID)