if(CreateProcess(Path, NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ;
CString Path;
Path = _T("D:\\Program Files\\TTPlayer\\TTPlayer.exe");
if(CreateProcess(Path, NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
}
以上这样的程序,下面3行我想拉个线程来做等待,避免主线程因为WaitForSingleObject阻塞而死掉。哪位能帮我改改。自己用_beginthread,AfxBeginThread,CreateThread改了半天,毫无结果。
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
6 个解决方案
#1
主线程先开新线程
将以上代码 全部放在线程里就行了
将以上代码 全部放在线程里就行了
#2
楼主可以把自己的代码贴出来
#3
代码有点少噢...
#4
你是说界面卡死?还是一个线程卡死?既然怕卡死,为什么还要WaitForSingleObject?
是想要监视运行,还是要取得运行结果?
说出原因来....................
是想要监视运行,还是要取得运行结果?
说出原因来....................
#5
其实这个是在一个循环里,目的是加载一系列的驱动,所以主界面不能出现卡死。哪位给个思路,我目前的想法是在CreateProcess之后拉起来一个线程把下面放进去跑。
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
但是不知道如何实现。还请高手帮忙。
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
但是不知道如何实现。还请高手帮忙。
#6
int i,count;
count = 15;
Path[]={程序路径};
for(i=0;i<count;i++)
if(CreateProcess(Path[i],
NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ;
CString Path;
Path = _T("D:\\Program Files\\TTPlayer\\TTPlayer.exe");
if(CreateProcess(Path, NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
}
所以我这里的等待是在等待前一个程序的结束。以便开始下个程序。
count = 15;
Path[]={程序路径};
for(i=0;i<count;i++)
if(CreateProcess(Path[i],
NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ;
CString Path;
Path = _T("D:\\Program Files\\TTPlayer\\TTPlayer.exe");
if(CreateProcess(Path, NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
}
所以我这里的等待是在等待前一个程序的结束。以便开始下个程序。
#1
主线程先开新线程
将以上代码 全部放在线程里就行了
将以上代码 全部放在线程里就行了
#2
楼主可以把自己的代码贴出来
#3
代码有点少噢...
#4
你是说界面卡死?还是一个线程卡死?既然怕卡死,为什么还要WaitForSingleObject?
是想要监视运行,还是要取得运行结果?
说出原因来....................
是想要监视运行,还是要取得运行结果?
说出原因来....................
#5
其实这个是在一个循环里,目的是加载一系列的驱动,所以主界面不能出现卡死。哪位给个思路,我目前的想法是在CreateProcess之后拉起来一个线程把下面放进去跑。
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
但是不知道如何实现。还请高手帮忙。
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
但是不知道如何实现。还请高手帮忙。
#6
int i,count;
count = 15;
Path[]={程序路径};
for(i=0;i<count;i++)
if(CreateProcess(Path[i],
NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ;
CString Path;
Path = _T("D:\\Program Files\\TTPlayer\\TTPlayer.exe");
if(CreateProcess(Path, NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
}
所以我这里的等待是在等待前一个程序的结束。以便开始下个程序。
count = 15;
Path[]={程序路径};
for(i=0;i<count;i++)
if(CreateProcess(Path[i],
NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ;
CString Path;
Path = _T("D:\\Program Files\\TTPlayer\\TTPlayer.exe");
if(CreateProcess(Path, NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
}
所以我这里的等待是在等待前一个程序的结束。以便开始下个程序。