gtk - 调用外部命令后,如何阻止它关闭gtk主窗口

时间:2012-08-31 05:30:44

标签: gtk phpexcel

我想从GtkListStore读取数据并通过phpExcel构建一个excel。首先,我根据GtkListStore构建一个php文件,然后我使用php和phpexcel lib来编译和构建execl文件。

在我的gtk代码中(在MinGW环境中编译),我使用execvp(cmd[0], (const char **)cmd);来调用外部命令--php。实际上,cmd[0]是php.exe和cmd [1],cmd [2] ...是php的参数。调用php命令后,我的gtk主窗口关闭,退出我的gtk程序。

如何防止php命令退出主程序?我应该使用别的而不是execvp吗?谢谢。

2 个答案:

答案 0 :(得分:0)

execvp()和朋友用另一个进程替换当前进程,因此您的程序退出也就不足为奇了。使用g_spawn_sync()或相关函数 - 将运行您的php程序,然后将控制权返回到您的原始程序。

答案 1 :(得分:0)

让我回答我自己的问题。接下来是我在过去几天里用Google搜索并尝试过的内容摘要。它没有什么新东西,但也许对像我这样的新手很有用。

首先,谢谢ptomato。为了避免我在GTK中出现问题,它必须使用g_spawn_sync或相关函数。如果您的命令是绝对路径,则不必使用标志G_SPAWN_SEARCH_PATH,否则请确保使用该标志。

以下内容与MinGW环境相关。

- > gspawn-Win32的helper.exe
在MinGW中,要使用g_spawn_sync,必须安装gspawn-win32-helper.exe。当我安装GTK环境时,我只提取了有用的lib或exe文件,我觉得它很有用,然后我错过了gspawn-win32-helper.exe,导致了上述评论中提到的问题 - Failed to execute helper program (No such file or directory)。从ftp://ftp.gtk.org/pub/glib/2.10/win32/glib-2.10.0.zip中提取gspawn-win32-helper.exe并安装后,g_spawn_sync工作。

- >对于规范的Windows路径,双反斜杠和单正斜杠都可以工作,例如c:/ foo / bar和c:\ foo \ bar work。