在多线程应用程序中更新GTK接口的最佳方法是什么?

时间:2015-07-08 09:30:54

标签: c++ multithreading gtk

据我了解,我这样做:

我的main函数在进入gtk主循环之前启动一些线程。

boost::thread p4(sensors_get_informations);
gtk_main ();

线程执行某些操作,然后更新接口中的相应元素。

void sensors_get_informations()
{
    while(!quit)
    {
       [...] //Doing some stuff
       gdk_threads_add_idle((GSourceFunc)update_label_sensors, &str_end); //Here the interface will be updated
       wait(1000);
    }
}

这个函数会更新元素(这里是标签)

static bool update_label_sensors(....)
{
    [...]
    gtk_label_set_label(GTK_LABEL(label_sensors), label_string);
    [...]
    return false;
}

我目前有5个线程一起工作,它似乎工作正常,但这是通常的做法,还是有办法改进它?

Here有人提出了另一种方法来更新界面上的内容,但是通过一些研究,似乎从主GTK线程以外的其他线程更新小部件有时会导致分段错误。

1 个答案:

答案 0 :(得分:0)

这是通常的方法。不允许从主GTK线程以外的其他线程更新小部件,这将导致程序无法预测地崩溃。