加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 摆脱ShellExecute引起的邪恶延迟

发布时间:2020-12-16 10:15:12 所属栏目:百科 来源:网络整理
导读:这是困扰我一段时间的事情,只需要解决这个问题.每次我调用 ShellExecute来打开一个外部文件(无论是文档,可执行文件还是URL),这都会导致我的程序中有很长的锁定,然后ShellExecute会生成新进程并返回.有谁知道如何解决或解决这个问题? 编辑:正如标签可能表明
这是困扰我一段时间的事情,只需要解决这个问题.每次我调用 ShellExecute来打开一个外部文件(无论是文档,可执行文件还是URL),这都会导致我的程序中有很长的锁定,然后ShellExecute会生成新进程并返回.有谁知道如何解决或解决这个问题?

编辑:正如标签可能表明的那样,这是在使用C的Win32上.

解决方法

你是多线程的吗?

我见过使用ShellExecute打开文件的问题.不是可执行文件,而是与应用程序关联的文件 – 通常是MS Office.使用DDE打开文件的应用程序对所有线程(好吧,我不知道是否全部…)程序进行了一些消息广播.由于我没有在我的应用程序中的工作线程中抽取消息,因此我会挂起shell(以及文件的开头)一段时间.它最终超时等待我处理消息,应用程序将启动并打开该文件.

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

更新
它必须不仅仅是任何正在执行此操作的线程,而是一个服务于窗口的线程. Raymond (link 1)知道所有(link 2).我打赌CoInitialize(单线程公寓)或MFC中的东西为线程创建了一个隐藏窗口.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读