gpt4 book ai didi

c++ - 如何使用 WaitForSingleObject

转载 作者:可可西里 更新时间:2023-11-01 12:42:16 27 4
gpt4 key购买 nike

为了尝试如何使用 Win32 API 进行编程,我编写了一个创建进程的程序。然后我想检查我的进程是否等待新创建的进程,关闭句柄然后再次检查 WaitForSingleObject(第二个进程休眠 700 毫秒)

第一个过程:

#include <iostream>
#include <windows.h>
#include <string>

using namespace std;

void main()
{
bool ret;
bool retwait;

STARTUPINFO startupinfo;
GetStartupInfo (&startupinfo);

PROCESS_INFORMATION pro2info;

wchar_t wcsCommandLine[] = L"D:\\betriebssystemePRA1PRO2.exe";

ret = CreateProcess(NULL, wcsCommandLine, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL,
NULL, &startupinfo, &pro2info);

cout<<"hProcess: "<<pro2info.hProcess<<endl;
cout<<"dwProcessId: "<<pro2info.dwProcessId <<endl;

if (retwait= WaitForSingleObject (pro2info.hProcess, INFINITE)==true)
cout<<"waitprocess:true"<<endl; //The process is finished
else
cout<<"waitprocess:false"<<endl;

CloseHandle (pro2info.hProcess);//prozesshandle schließen, "verliert connection"

if (retwait= WaitForSingleObject (pro2info.hProcess, INFINITE)==true) //When the process has finished
cout<<"waitprocess:true"<<endl;
else
cout<<"waitprocess:false"<<endl;

//cout<<GetLastError()<<endl; //Output the last error.

ExitProcess(0);
}

第二个过程:

#include <iostream>
#include <windows.h>
#include <string>

using namespace std;

void main()
{
int b;

b = GetCurrentProcessId();

cout << b << endl;
cout << "Druecken Sie Enter zum Beenden" << endl;
cin.get();
//Wait until the user confirms

Sleep (700);
ExitProcess(0);

cout<<"test";
}

第一个进程打印 false, false ;但它应该打印 true, false。

我用这个代替 if-else 语句:

//switch(WaitForSingleObject (pro2info.hProcess, INFINITE)){
// case WAIT_OBJECT_0: cout << "ja";
// break;
// case WAIT_FAILED:cout << "nein";
// break;
// case WAIT_TIMEOUT:
// break;
//}
// cout<<"waitprocess:true"<<endl;//prozess ist fertig
//else
// cout<<"waitprocess:false"<<endl;

这似乎有效。我的 if-else 语句做错了什么?

最佳答案

真的需要注意 API 函数返回值的含义。您不能忽略 CreateProcess() 返回的 FALSE。 WaitForSingleObject() 可以返回多个值,如果等待成功完成则返回 0。这让你打印“假”。

关于c++ - 如何使用 WaitForSingleObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2554447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com