GSubprocess 可以安全地在线程中使用吗?
Can GSubprocess be used in a thread safely?
我 运行 遇到了 GtkSubprocess 的一些问题,我发现它与使用线程有关,有没有办法让它不受并发问题的影响?
我有这个程序可以对文件进行一些操作,这些操作分别由 GtkListBoxRow
s 表示。当 GSubprocess 完成时,我试图删除列表框行,程序出现段错误。顺便说一句,每个文件都有自己的进程,所以如果一个用户加载 10 个文件,就会有 10 个线程(这是由 GThreadPool
管理的)。有趣的是,如果我注释掉启动进程的代码,以及阻塞线程函数直到进程完成的代码,程序就不会出现段错误。所以我推断 GSubprocess
存在并发问题。产生的错误变化很大,所以这一定是由于时间相关的问题。
我想使用GSubprocess
,因为它相对容易获得我需要的命令输出。我是否需要将 GSubprocess 的调用移到线程函数之外?
我发现它并不安全,因为它在 GTK+ 源代码中有内部实现。而且您甚至不应该在应用程序中使用线程,如调用的 here. Here is my workaround: create the process in the main loop, and wait for the process to terminate using the async 版本所述。这样你就避免了线程。
我 运行 遇到了 GtkSubprocess 的一些问题,我发现它与使用线程有关,有没有办法让它不受并发问题的影响?
我有这个程序可以对文件进行一些操作,这些操作分别由 GtkListBoxRow
s 表示。当 GSubprocess 完成时,我试图删除列表框行,程序出现段错误。顺便说一句,每个文件都有自己的进程,所以如果一个用户加载 10 个文件,就会有 10 个线程(这是由 GThreadPool
管理的)。有趣的是,如果我注释掉启动进程的代码,以及阻塞线程函数直到进程完成的代码,程序就不会出现段错误。所以我推断 GSubprocess
存在并发问题。产生的错误变化很大,所以这一定是由于时间相关的问题。
我想使用GSubprocess
,因为它相对容易获得我需要的命令输出。我是否需要将 GSubprocess 的调用移到线程函数之外?
我发现它并不安全,因为它在 GTK+ 源代码中有内部实现。而且您甚至不应该在应用程序中使用线程,如调用的 here. Here is my workaround: create the process in the main loop, and wait for the process to terminate using the async 版本所述。这样你就避免了线程。