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

Spawn console window without locking application

本文关键字:控制台 窗口 情况下 锁定 应用程序      更新时间:2023-10-16

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

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

问题是导出可能需要一个小时或更长时间,我不想锁定应用程序。我看到有人提到,在命令末尾使用"&"可以实现这一点(如:"c:\some\path\export.exe-id 19998&),但这对我不起作用。

如有任何帮助,我们将不胜感激。

问题是导出可能需要一个小时或更长时间,我不想锁定应用程序。

CCD_ 1调用同步执行,并阻塞调用线程直到完成。

寻找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();

amp;在shell中工作(命令提示符)。您应该做的是使用CreateThread创建一个新线程,或者如果您使用C++11 std::thread,则从那里调用新命令。不过,我建议不要使用系统命令:http://www.cplusplus.com/forum/articles/11153/