我正在使用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
像计数器一样运行的次数。这样我就可以显示计数器的数量。这怎么可能。?
请帮助谢谢。
答案 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
非常清楚。
您可以gpointer
到gboolean STOP
,完成serial_data
中的return STOP
功能,并stop button
更改STOP = FALSE
它将停止调用该函数。或类似的东西。
答案 2 :(得分:0)
在文档中,该函数被重复调用,直到返回FALSE 。您可以使用布尔参数调用on_update_button
来切换超时调用,使其不再被连续调用,在参数计算为TRUE
时将其设置为运行,如果参数为{{ 1}}。这是一个演示:
g_source_remove(threadID)