c++ - 启动外部应用程序并阻止当前应用程序直到启动的应用程序退出

标签 c++ visual-c++ mfc

不知道有没有办法

启动一个外部应用程序,并阻止当前应用程序直到启动的应用程序退出。

目前,我正在使用以下非阻塞方法(MFC)启动

std::string str = "Notepad2.exe";
// Non-blocking. Return immediately.
WinExec(str.c_str(), SW_SHOW);

最佳答案

代码:

SHELLEXECUTEINFO sei = {0};

sei.cbSize = sizeof (SHELLEXECUTEINFO);
sei.fMask  = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = "open";
sei.lpFile = "notepad.exe";
sei.nShow  = SW_SHOWNORMAL;

if (ShellExecuteEx (&sei))
{
   WaitForSingleObject (sei.hProcess, INFINITE);
}

正如 Jerry 所指出的,这对您自己的 GUI 不利。但是,如果您直接或间接启动的进程执行广播 SendMessage,那么这可能会导致灾难性的死锁,因为您的进程有一个窗口但没有发送任何消息:启动的进程正在等待您的代码处理它的消息,并且你在等它。铛...

您可以改用 MsgWaitForMultipleObjects,或者更好的是,将启动和等待拆分为一个线程,并简单地禁用您不希望用户与之交互的 UI 的任何部分。

关于c++ - 启动外部应用程序并阻止当前应用程序直到启动的应用程序退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209643/

相关文章:

c++ - 鼠标在windows中是如何渲染的

c++ - 为什么在创建一个vector<A>时,类A的构造函数和析构函数只调用一次?

c++ - 将 C++ __fastcall Hook 从 x86 移植到 x64

c++ - ISO C++ 标准 - 关于检查依赖库的规则。为什么?

multithreading - 从 WorkerThread 到 MFC 中的主窗口的 PostMessage

c++ - 设置引用c++

c++ - OpenMP/__gnu_parallel 用于 unordered_map

c++ - 如何保持内联调用但避免编译器警告?

c++ - 删除线程时崩溃

c++ - CMapStringToString 无法处理 Unicode?