使用gtk进行多任务处理

时间:2011-03-08 22:11:41

标签: c gtk

在运行gtk系统托盘图标时,如何在后台运行常量进程?我是否只需启动两个线程并使用一个系统托盘图标启动进程?或者,还有更好的方法?对不起,但我对gtk来说有些新鲜。

2 个答案:

答案 0 :(得分:4)

如果我理解正确,那么您的应用程序就位于系统托盘中,并且需要定期检查外部情况。

您的GUI线程长时间无法阻止,或者无法响应。

我可以想到三种解决这个问题的技巧:

  • 使用计时器定期从主(GUI)线程(g_timeout_add()或类似线程)进行轮询。
  • 创建一个运行忙等待循环的单独线程(检查条件;睡眠;检查;冲洗和重复)。 Glib支持您可以使用的thread abstraction; example GThread usage in Brasero
  • 使用异步IO检查条件。如果您正在监视文件或目录以进行更改,则可以使用GIO中的GFileMonitor

答案 1 :(得分:0)

我认为你的例子中不需要任何线程。你究竟称之为“持续过程”?

要么是:

  • 您执行的阻止处理功能,您可以在程序空闲时调用的回调中进行处理,将其分成几个部分(请参阅g_idle_add和{{3}的示例})
  • 或者它通常被称为进程(具有PID),并且当它在完全独立的进程中运行时,您也不需要线程。阅读官方文档,了解如何从GTK应用程序lazy loading