【问题标题】:g timeout add seconds in gtk c++g超时在gtk c ++中添加秒数
【发布时间】:2021-12-17 18:48:45
【问题描述】:

我正在为显示消息创建类 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);
}

请帮助! 提前致谢!

【问题讨论】:

  • msgbox.cpp:84:72 这是哪一行?这是整个代码吗?
  • 您显示的代码与您提供的错误消息不匹配。请尝试创建一个正确的minimal reproducible example 向我们展示,并将该示例中完整且完整的构建输出复制粘贴到问题中。并在出现错误的行添加注释。
  • 话虽如此,你的Label 函数返回了什么?将该结果用作函数调用的参数是否有意义?

标签: c++ class gtk gtk2


【解决方案1】:

文档。 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 : 传递给函数的数据
返回:事件源的ID(大于0)。

自 2.14 起

由此GSourceFunc被定义为:

gboolean            (*GSourceFunc)                      (gpointer data);

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

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

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

即它必须

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

如何声明MsgBox::Label()(关于static)不是由OP公开,而是 无论如何,签名是错误的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2013-01-27
    • 2013-01-27
    • 2015-09-30
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多