首页 > 解决方案 > g超时在gtk c ++中添加秒数

问题描述

我正在为显示消息创建类 10 秒,然后关闭表单。我使用g_timeout_add_seconds延时功能。在编译时我面临如下错误:

msgbox.cpp:84:72: error: invalid use of void expression 
int a = g_timeout_add_seconds(1, this->Label(i), (gpointer)this);

代码如下:

void Msgbox::LabelUpdate(void)
{
  int i = 1;
  while(i <= 10)
  {
    g_timeout_add_seconds(1, this->Label(i), (gpointer)this);
    i++;
  }
  gtk_widget_set_sensitive(close_btn , TRUE);
  gtk_widget_grab_focus(close_btn);
}

void Msgbox::Label(int time)
{
  char buf[256];
  sprintf(buf, "<span color=\"purple\"><b> Time to wait : %d secs </b></span>", time);
  gtk_label_set_markup (GTK_LABEL(msg_lbl), buf);
}

请帮助!提前致谢!

标签: c++classgtkgtk2

解决方案


博士。g_timeout_add_seconds:_

guint               g_timeout_add_seconds               (guint interval,
                                                         GSourceFunc function,
                                                         gpointer data);

设置以默认优先级 G_PRIORITY_DEFAULT 定期调用的函数。重复调用该函数,直到返回FALSE,此时超时自动销毁,该函数将不再被调用。

这在内部使用 g_timeout_source_new_seconds() 创建一个主循环源,并使用 g_source_attach() 将其附加到主循环上下文。如果您需要更好的控制,您可以手动执行这些步骤。另请参阅 g_timout_add_seconds_full()。

interval:调用函数之间的时间,以秒为单位
function:调用函数
data:传递给函数的数据
Returns:事件源的 ID(大于 0)。

自 2.14 起

因此GSourceFunc被定义为:

gboolean            (*GSourceFunc)                      (gpointer data);

指定传递给 g_timeout_add()、g_timeout_add_full()、g_idle_add() 和 g_idle_add_full() 的函数类型。

data :传递给函数的数据,在使用上述函数之一创建源时设置。
返回:如果应该删除源,它应该返回 FALSE。

MsgBox::Label()用作 的第二个参数g_timeout_add_seconds(),它必须匹配 的签名GSourceFunc

即它必须

  • 成为static成员函数
  • 有返回类型gboolean
  • 有一个参数gpointer

OP 没有公开如何MsgBox::Label()声明(关于),但无论如何签名都是错误的。static


推荐阅读