生成的控制台窗口没有锁定应用程序

时间:2016-05-18 18:25:58

标签: c++ visual-c++

我正在尝试生成一个控制台窗口,根据用户选择的某些数据从我的应用程序运行另一个可执行文件。这是一个非常简单的设置。

std::string command;
{
    command += "\"" + INSTALL_DIR + "export.exe\"";
    command += " -id " +  processID;
}
system(command.c_str());

问题是导出可能需要一个小时或更长时间,我不想锁定应用程序。我看到提到使用“&”在命令结束时将完成此操作(例如:“c:\ some \ path \ export.exe -id 19998&”)但它对我不起作用。

任何帮助都将不胜感激。

2 个答案:

答案 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/