用createprocess()创建子进程,子进程用settimer()一直等待。想用父进程结束掉该子进程。在创建子进程的时候,将子进程的句柄保存起来,在父进程里用TerminateProcess()结束子进程,结束不掉,用getlasterror()查看,输出error 288,Attempt to release mutex not owned by caller.不想用进程间通讯,让子进程自己退出,就是要用TerminateProcess()结束之。别外在该进程中用TerminateProcess(GetCurrentProcess(),GetExitCodeProcess(GetCurrentProcess(),&dexit))结束自己,无任何反应,用getlasterror()也无任何输出。
解决方案 »
- 求助:点击一个按钮,关闭一个线程,获得线程值才继续执行,怎么办?
- combobox中调用了OnCbnSelchangeCombo1()之后的问题??小弟用的是vs08
- 帮忙多线程问题
- 一个仿explore的程序
- 我在制作工具条,在MainFrame的OnCreate里,写了这样一段为什么有错??我做得是跟IE效果一样的。
- 有关出错提示的疑问,我是新手,请前辈们赐教
- 在AppWizard没有选择静态链接库,此后如何补上?
- 用鼠标钩子处理WM_MOUSEMOVE消息时遇到的问题。。。。。。。
- 如何动态改变鼠标样式,比如在视图上一点就换层小手,给50分
- NT/2000下锁定工作站后的几个问题
- 请网络编程资料
- 关于娱乐答题系统改怎么做
//创建子进程代码,hcmd是父进程句柄,这里没用到
bool stopprocess(HANDLE hCmd)
{ string scmdlineget="cmd /c D:\\Settimer\\Debug\\Settimer.exe";
char *cmdlineget=new char[strlen(scmdlineget.c_str())+1];
strcpy(cmdlineget,scmdlineget.c_str());
STARTUPINFO si1;
PROCESS_INFORMATION pi1;
ZeroMemory(&si1,sizeof(STARTUPINFO));
si1.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si1);
si1.wShowWindow = SW_SHOW;
si1.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; if (!CreateProcess(NULL,cmdlineget,NULL,NULL,TRUE,NULL,NULL,NULL,&si1,&pi1))
{
MessageBox(NULL,"CreateProcess Failed!","提示",MB_OK | MB_ICONWARNING);
return 0;
} //hterminal在全局变量里定义的
hterminal=pi1.hProcess; //关闭Handle,就会出现句柄失效错误,所以给注释掉了
//CloseHandle(pi1.hThread);
//CloseHandle(pi1.hProcess); return 1;
} //结束本进程,给注释掉了
//DWORD dexit;
//TerminateProcess(GetCurrentProcess(),GetExitCodeProcess(GetCurrentProcess(),&dexit)); //结束子进程
DWORD dexit;
TerminateProcess(hterminal,GetExitCodeProcess(hterminal,&dexit));
cout<<"+++++++++++++++++"<<GetLastError()<<endl;
嗯,我输出了hterminal的值,是正确的。getlasterror()的错误是 “Attempt to release mutex not owned by caller”
代码里把这个注释掉了,调用CloseHandle()后,hterminal失效了。
if(GetExitCodeProcess(hterminal,&dexit))
{
TerminateProcess(hterminal,dexit);
}
我本来是想试试,用父进程创建一个子进程,就把子进程放那儿没管了。结束发现父进程执行完了,子进程没退出,父进程就一直在,所以就想用父进程来结束子进程。一直结束不掉,有问题就要解决它嘛,所以我就拿到csdn来探究咯。
还是getlasterror()的值还是288,求解,大牛们都来啊。
父进程,还是其他进程?
你给的信息太少,无法知道你为啥会出现288错误给出288错误的解释:
(288)-企图释放并非呼叫方所拥有的多用户终端运行程序