GTK +接口应该在一个单独的线程中运行吗?

时间:2014-03-19 15:40:09

标签: c++ multithreading gtk gtkmm

我正在迈出GTK +的第一步(C++gtkmm更具体)我对如何最好地构建我的程序有一个相当概念上的怀疑。现在我只想让我的GUI通过打印几个值来显示我的C ++程序中发生的事情,并且由于我的主线程在GUI窗口运行时停止,我遇到了分离处理/计算操作和单独线程中的图形界面。这通常被认为是最好的方式吗,根本不是,甚至不相关?

4 个答案:

答案 0 :(得分:3)

除非你有充分的理由,否则通常最好不要创建新线程。同步很难做到。

GUI编程是事件驱动的(单击按钮会发生一些事情)。因此,您可能需要将后台处理绑定到GUI事件系统中。

如果您的后台处理需要很长时间,则需要将其分解为多个快速块。在每个块的末尾,您可以更新进度条并安排下一个块。

这意味着你可能需要使用一些状态机模式。

还要确保任何IO都是非阻塞的。

答案 1 :(得分:1)

这是一个使用没有额外线程的主循环在较小块中拆分的冗长操作的示例。 Lazy Loading using the main loop

答案 2 :(得分:0)

是的,绝对!(以回应您的头衔)

GUI 必须在单独的线程中运行。如果您遇到过那些在操作正在进行时锁定的非常恼人的接口 1 ,您就会知道为什么让GUI始终运行非常重要,而不管操作是否发生。

这是一种用户体验。


1 我不是指在操作期间禁用某些按钮的那些(这是正常的),而是那些看起来都冻结的按钮。

答案 3 :(得分:0)

相反:主线程应该是Gtk的,长时间的处理/计算任务应该在线程中完成。

文档给出了一个清晰的例子: https://pygobject.readthedocs.io/en/latest/guide/threading.html