我正在尝试生成一个控制台窗口,根据用户选择的某些数据从我的应用程序运行另一个可执行文件。这是一个非常简单的设置。
std::string command;
{
command += "\"" + INSTALL_DIR + "export.exe\"";
command += " -id " + processID;
}
system(command.c_str());
问题是导出可能需要一个小时或更长时间,我不想锁定应用程序。我看到提到使用“&”在命令结束时将完成此操作(例如:“c:\ some \ path \ export.exe -id 19998&”)但它对我不起作用。
任何帮助都将不胜感激。
答案 0 :(得分:5)
问题是导出可能需要一个小时或更长时间,而且我不想锁定应用程序。
system()
调用同步执行并阻塞调用线程直到完成。
查找CreateProcess()
直接与winapi进行交互,或使用fork()
和exec()
系列中的某些功能生成异步运行的子进程。
另一个(便携式)解决方案是在您的应用中使用单独的std::thread
,以发出system()
来电:
std::string command;
command += "\"" + INSTALL_DIR + "export.exe\"";
command += " -id " + processID;
std::thread t([](const std::string& command){
system(command.c_str());
}, command);
std::cout << "main thread" << std::endl;
但是您需要在应用程序退出之前至少加入该线程:
t.join();
答案 1 :(得分:0)
&安培;在shell中工作(命令提示符)。你应该做的是使用CreateThread
创建一个新线程,或者如果你使用C ++ 11 std::thread
,并从那里调用新命令。我建议不要使用系统命令:http://www.cplusplus.com/forum/articles/11153/