这是困扰我一段时间的事情,只需要解决这个问题即可。每次我调用ShellExecute打开一个外部文件(文档,可执行文件或URL)时,这都会在ShellExecute产生新进程并返回之前导致程序中很长的锁​​定。有谁知道如何解决或解决此问题?

编辑:正如标签可能指示的那样,这是在使用C++的Win32上。

最佳答案

你是多线程的吗?

我已经看到了使用ShellExecute打开文件的问题。不是可执行文件,而是与应用程序关联的文件-通常是MS Office。使用DDE打开文件的应用程序向所有程序中的所有线程广播了一些消息。因为我没有在应用程序的工作线程中泵送消息,所以我将 shell (和文件的打开)挂了一段时间。最终它超时,等待我处理该消息,应用程序将启动并打开文件。

我记得在循环中使用PeekMessage只是删除该工作线程在队列中的消息。我一直以为有一种方法可以避免这种情况,也许以不同的方式创建线程,使其永远不会成为消息的目标?

更新
一定不仅仅是执行此操作的任何线程,而是服务于窗口的线程。 Raymond (link 1)知道所有(link 2) 。我打赌CoInitialize(单线程单元)或MFC中的某项为线程创建了一个隐藏窗口。

关于c++ - 摆脱ShellExecute造成的有害延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/177559/

10-10 13:31