WaitForSingleObject这个函数怎么用?

sirdan 2010-07-27 02:25:29
我的程序是这样写的:
if( !CreateProcess( NULL, // No module name (use command line)
cmd.GetBuffer(0), // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
printf( "CreateProcess failed (%d)\n", GetLastError() );
return 0;
}

// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );

// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

在我的程序里面,创建了一个进程,该进程启动ie。当ie关闭时,我的程序也结束。
这段程序在我的win7系统下,有问题。如果我事先将ie启动起来,再运行我的程序,
这时虽然也启动起了一个ie,但WaitForSingleObject函数却上来就得到了信号,然后
我的程序就结束了。

请问,这是怎么回事呢?
...全文
296 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyster2008 2010-07-28
  • 打赏
  • 举报
回复
google了一下,与IE8有关,不是bug
oyster2008 2010-07-28
  • 打赏
  • 举报
回复
1)在 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 键下面添加DWORD值 TabProcGrowth。
2)设置TabProcGrowth的数值为 0
然后再尝试
sirdan 2010-07-28
  • 打赏
  • 举报
回复
加入-new后,无改观,与之前同样的错误。
oyster2008 2010-07-27
  • 打赏
  • 举报
回复
应该是IE进程启动时做了检测,默认使用已经存在的进程,-new表示打开新进程
cattycat 2010-07-27
  • 打赏
  • 举报
回复
windows核心编程大部分针对windows 2000谈的,那时候还没xp呢,更不要说win7了。
那个createprocess的最后一个参数可以获取子进程id。如果这个进程合并成一个进程,那就是等待的进程handle出错返回了。你可以根据waitforsingleobject的返回值输出看一下,如果不是WAIT_OBJECT_0就说明等待出问题了。
oyster2008 2010-07-27
  • 打赏
  • 举报
回复
命令行里面添加 -new 参数呢
iexplorer -new www.google.com
job82824 2010-07-27
  • 打赏
  • 举报
回复
既然能够获得进程,那再增加一个获得ie窗口名的判断如何?这样就把其它的ie被结束的情况排除了。
貌似windows没有子进程与父进程的维护,也就是子进程与父进程间没有对应关系的。只有在linux下面才会进行父子对应关系的维护的。好久不看书了,都生疏了......
sirdan 2010-07-27
  • 打赏
  • 举报
回复
这段程序在xp系统上没有问题。win7下面加上ie8,就有问题发生。

我看了一下,ie8比较特别,它会合并多个ie成为一个进程,而且哪个ie窗口最先打开就投靠谁。导致了此问题。

解决方法,我想有可能在createprocess函数的参数设置上,具体怎样设置,尚不明确。有知道的请告知。

另外,回答说看《Windows核心编程》补课的,实在无法令人满意。假如一个人车坏了,是应该去找人修车呢还是应该去看汽车机械原理呢?
cattycat 2010-07-27
  • 打赏
  • 举报
回复
这个查了下,不太清楚什么原因。。
赵4老师 2010-07-27
  • 打赏
  • 举报
回复
看《Windows核心编程》补课
SEESEECN 2010-07-27
  • 打赏
  • 举报
回复
你看下PROCESS_INFORMATION这个结构的说明吧,可能是你启动的ie已经包含了hProcess信息了。如果想要实现你的效果,最好在watifor前面加个判断比较好!
ayw215 2010-07-27
  • 打赏
  • 举报
回复
这个没遇到
学习~~
GingerJWS 2010-07-27
  • 打赏
  • 举报
回复
你起动的ie进程退了,你注意下pid,系统中有的是不是你创建出来的pid

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧