如何从外部函数更新 Gtk::TreeModel::Row
目前我正在开发一个多线程应用程序。 我使用 TreeView 显示每个线程的状态,每个线程一行。 主要有两个类:
- 主 GUI 类,包含
- 用于线程处理的 TreeView 类
将 Gtk::TreeModel::iterator 作为参数传递给第二个类是不可行的,因为我们无法以 row[m_Columns.m_id] 等格式访问 row 中的元素。 使用 Glib::Dispatcher 也是不可用的,因为我们在外部函数中更改的元素是特定于线程的。
那么,有没有什么实用的方法可以从外部函数更新GUI呢?
Currently I'm developing a multi-thread application. I use a TreeView to display the states of each thread, one row per thread.
There are mainly two classes:
- Main GUI class containing TreeView
- class for thread handling
Passing Gtk::TreeModel::iterator as an argument to the second class is not viable since we cannot access the elements in row in formats like row[m_Columns.m_id].
Using Glib::Dispatcher is also unavailable since the elements we change in the external function is thread-specific.
So, is there any practical method to update GUI from external functions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可以在外部文件中声明列的类,并将该文件包含在 GUI 类文件和线程类文件中。
这样
,如果您在 GUI 类中创建了 Columns 实例 m_columns,并将其作为参数传递给线程类,则可以使用它
来访问 TreeModel 中的元素。
It's available to declare a class for Columns in an external file and include the file in both GUI class file and thread class file.
Like
So that if you created a Columns instance m_columns in GUI class, and passed it as a parameter to thread class, you can use
to access the elements in TreeModel.
我认为你应该重新考虑你的架构。 最简单、最安全的方法是让线程以线程安全的方式将信息发送到收集它们的类。 然后让你的 GUI 线程读取这些信息,更改你的 treevien,然后刷新。
我在大型 gtkmm/多线程应用程序中使用此范例。 请记住,集中同步代码总是更好。
我希望它有帮助。
I think you should rethink your architecture. The simpliest and safest way is for your thread to send information in a thread safe way to a class that will gather them. Then make your GUI thread read those informations, change your treevien and then refresh.
I use this paradigm in a big gtkmm/multithreaded application. Remember that it is always better to centralize your synchronization code.
I hope it helps.