为什么WaitForSingleObject不起作用了
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <afx.h>
#include<windows.h>
#include"tlhelp32.h"
using namespace std;
void main()
{
CString cmdline="-vx 2d -i E:\\zuoye\\gambit1\\2.jou";
STARTUPINFO StartupInfo;
memset(&StartupInfo,0,sizeof(STARTUPINFO));
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.dwFlags=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow=SW_SHOWNORMAL;
PROCESS_INFORMATION ProcessInfo;
if (!::CreateProcess("D:\\Program Files\\fluent\\Fluent.Inc\\ntbin\\ntx86\\fluent.exe" ,cmdline.GetBuffer(cmdline.GetLength()),NULL,NULL,FALSE,0,NULL,"E:\\zuoye\\gambit1",&StartupInfo,&ProcessInfo))
{cout<<"success";
}
HANDLE han=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取进程快照/*
HANDLE han2;
PROCESSENTRY32 lpp;
lpp.dwSize=sizeof(PROCESSENTRY32);
BOOL bo;
bo=Process32First(han,&lpp); //从快照里取第一个进程信息
TCHAR *str1;
while(bo)
{
str1=lpp.szExeFile; //str2=_strlwr(str1);
if(!strcmp(str1,"fl6326s.exe")) //|| !strcmp(str1,"fl6326s.exe")-----判断是否WINWORD.EXE
{
han2=OpenProcess(PROCESS_TERMINATE,TRUE,lpp.th32ProcessID); //取进程实例 HANDLE
TerminateProcess(han2,0); //关闭
}
bo=Process32Next(han,&lpp); //取下一个进程信息
}
WaitForSingleObject(han2,INFINITE);
CloseHandle(han); //关闭快照
//这里是接下来的其他程序,要用到调用前一个程序的结果
}
但是运行时WaitForSingleObject(han2,INFINITE);并没有工作,后面的代码就直接执行了
加入下面一段代码试了一下返回的是Invalid process handle...
请问这是什么原因,各位帮忙看看,谢谢
DWORD nRet = WaitForSingleObject(han2,INFINITE);
if (nRet == WAIT_OBJECT_0)
{
printf("Process is signaled...\n");
}
else if (nRet == WAIT_TIMEOUT)
{
printf("Time out...\n");
}else if (nRet == WAIT_FAILED)
{
printf("Invalid process handle...\n");
}
[解决办法]
可能运行后立马换了个exe