我在GtkSubprocess中遇到了一些问题,我发现它与使用线程有关,有没有办法使它免受并发问题的影响?
我有一个程序,它对一个文件执行一些操作,这些操作分别由GtkListBoxRow
s表示。当GSubprocess完成,并且我试图删除列表框行时,程序segfault。顺便说一句,每个文件都有自己的进程,所以如果用户加载10个文件,就会有10个线程(这是由GThreadPool
管理的(。有趣的是,如果我注释掉启动进程的代码,以及阻塞线程函数直到进程结束的代码,程序就不会出错。因此,我推断GSubprocess
在并发方面存在问题。产生的错误变化很大,所以这一定是由于时间相关的问题。
我想使用GSubprocess
,因为它相对容易获得我需要的命令的输出。我是否需要将对GSubprocess的调用转移到线程函数之外?
我发现它不安全,因为它在GTK+源代码中的内部实现。而且,您甚至不应该在应用程序中使用线程,如本文所述。以下是我的解决方法:在主循环中创建进程,然后等待进程使用异步版本的调用终止。因此,您可以避免线程。