how to use WaitForSingleobject

Posted by Tyzak on Stack Overflow See other posts from Stack Overflow or by Tyzak
Published on 2010-03-31T15:58:49Z Indexed on 2010/03/31 16:13 UTC
Read the original article Hit count: 699

Filed under:
|

hello in order to try out how to programm with the win32 api i wrote a programm that creates a process. then i want to check if my proccess waits for the new created process, close the handle and then check waitforsingle obj. again. (the seconde process is sleeping for 700 ms)

first process:

#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; //prozess ist fertig
    else
        cout<<"waitprocess:false"<<endl;

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

    if (retwait= WaitForSingleObject (pro2info.hProcess, INFINITE)==true)//wenn der prozess fertig ist
        cout<<"waitprocess:true"<<endl;
    else
        cout<<"waitprocess:false"<<endl;


    //cout<<GetLastError()<<endl;   //gibt den letzten fehler aus

ExitProcess(0);


}

seconde process:

#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();
        //warten bis Benutzer bestätigt

    Sleep (700);
    ExitProcess(0);

    cout<<"test";
}

the first process prints false, false ; but it should print true, false.

instead of the if-else statement is used this:

//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;

and this seems to work. what did i wrong with my if-else statement? thanks in advance

© Stack Overflow or respective owner

Related posts about c++

Related posts about Windows