GTK+,如何将小部件更新到主循环中
GTK+, how to update widgets into mainloop?
我的程序使用 2 个线程(boost::thread),当然还有 1 个主循环。问题是我目前在每个线程的末尾更新了 2 个小部件,这些更新有时会引发分段错误。
我使用函数"gtk_widget_queue_draw"将小部件更新到我的线程中。
我在网上的某个地方看到我们必须将所有小部件更新到主循环中,而不是更新到线程中,所以我的问题很简单,我该怎么做?
也许有信号?
我已经尝试过使用基金会"g_idle_add",但它也不起作用。似乎我也可以使用gtk_thread_enter和gtk_thread_leave但这两个函数已被弃用。
谢谢
编辑:我差点忘了;如果我想手动更新我的小部件,那是因为它们不会自动更新(其中一个小部件是用开罗绘制的图表)
"g_idle_add"似乎是做到这一点的好方法,但它最终也会导致分段错误。这是我实现它的方式:
在我的线程中:
g_idle_add ((GSourceFunc)update_label_monitor_cpu, &string_cpu);
以及函数本身:
void update_label_monitor_cpu(std::string *str)
{
std::string tmp = *str;
gtk_label_set_label(GTK_LABEL(label_monitor_cpu), (gchar*)tmp.c_str());
}
g_idle_add()
是正确的方法。您会收到分段错误,因为您的字符串超出范围,并且在空闲回调运行之前被销毁。您需要手动管理空闲回调中字符串的内存;例如,使用 g_strdup()
和 g_free()
.
相关文章:
- C++ 和 Boost.Python - 如何将变量公开给 python 并在循环中更新它?
- 宽藤会话更新无休止循环
- 在 for 循环中更新两个变量时遇到问题C++
- 更新 for 循环中的变量
- 在运行 while 循环中从 QLineSeries 更新 QChart
- 更新OpenMP内部的哈希地图以进行循环
- 在游戏更新循环中计算布尔的真/假变化
- 为什么在C 中进行循环后,该变量未更新
- 用于在数组中找到零并切换标志 更新另一个数组的循环的SSE优化
- 如何防止游戏引擎更新循环中的多个声音呼叫
- 如何在C 中动态更新for循环的条件
- 只有当循环中更新的变量是局部变量时,计算才会优化
- C 变量未更新循环
- 需要更新for循环中的值
- 循环更新 Linux 的终端屏幕
- 我将如何在 c++ 中创建一个实时更新覆盖上一个条目的循环
- 如何在C++的嵌套循环中正确更新进度条
- 为什么矢量不在循环中更新
- 在通用对象更新循环中,是按控制器更新更好还是按对象更新更好
- C++ DirectX11 将同一矢量中的元素设置为同一更新循环中的不同位置