diff --git a/testConsoleBuf.cxx b/testConsoleBuf.cxx index 6c79d891d998085e48261aff3412d23d1524451d..59d5633a1c98a6cfda97c23cf8294af3d7a25742 100644 --- a/testConsoleBuf.cxx +++ b/testConsoleBuf.cxx @@ -44,7 +44,8 @@ static UINT TestCodepage = KWSYS_ENCODING_DEFAULT_CODEPAGE; static const DWORD waitTimeout = 10 * 1000; static STARTUPINFO startupInfo; static PROCESS_INFORMATION processInfo; -static HANDLE syncEvent; +static HANDLE beforeInputEvent; +static HANDLE afterOutputEvent; static std::string encodedInputTestString; static std::string encodedTestString; @@ -259,9 +260,8 @@ static int testPipe() if (createProcess(inPipeRead, outPipeWrite, errPipeWrite)) { try { - Sleep(100); DWORD status; - if ((status = WaitForSingleObject(syncEvent, waitTimeout)) != WAIT_OBJECT_0) { + if ((status = WaitForSingleObject(afterOutputEvent, waitTimeout)) != WAIT_OBJECT_0) { std::cerr.setf(std::ios::hex, std::ios::basefield); std::cerr << "WaitForSingleObject returned unexpected status 0x" << status << std::endl; std::cerr.unsetf(std::ios::hex); @@ -347,9 +347,8 @@ static int testFile() if (createProcess(inFile, outFile, errFile)) { DWORD bytesRead = 0; try { - Sleep(100); DWORD status; - if ((status = WaitForSingleObject(syncEvent, waitTimeout)) != WAIT_OBJECT_0) { + if ((status = WaitForSingleObject(afterOutputEvent, waitTimeout)) != WAIT_OBJECT_0) { std::cerr.setf(std::ios::hex, std::ios::basefield); std::cerr << "WaitForSingleObject returned unexpected status 0x" << status << std::endl; std::cerr.unsetf(std::ios::hex); @@ -540,7 +539,7 @@ static int testConsole() if (createProcess(NULL, NULL, NULL)) { try { DWORD status; - if ((status = WaitForSingleObject(syncEvent, waitTimeout)) != WAIT_OBJECT_0) { + if ((status = WaitForSingleObject(beforeInputEvent, waitTimeout)) != WAIT_OBJECT_0) { std::cerr.setf(std::ios::hex, std::ios::basefield); std::cerr << "WaitForSingleObject returned unexpected status 0x" << status << std::endl; std::cerr.unsetf(std::ios::hex); @@ -561,7 +560,7 @@ static int testConsole() &eventsWritten) || eventsWritten == 0) { throw std::runtime_error("WriteConsoleInput failed!"); } - if ((status = WaitForSingleObject(syncEvent, waitTimeout)) != WAIT_OBJECT_0) { + if ((status = WaitForSingleObject(afterOutputEvent, waitTimeout)) != WAIT_OBJECT_0) { std::cerr.setf(std::ios::hex, std::ios::basefield); std::cerr << "WaitForSingleObject returned unexpected status 0x" << status << std::endl; std::cerr.unsetf(std::ios::hex); @@ -625,12 +624,18 @@ int testConsoleBuf(int, char*[]) int ret = 0; #if defined(_WIN32) - syncEvent = CreateEventW(NULL, - FALSE, // auto-reset event - FALSE, // initial state is nonsignaled - SyncEventName); // object name - if (!syncEvent) { - std::cerr << "CreateEvent failed " << GetLastError() << std::endl; + beforeInputEvent = CreateEventW(NULL, + FALSE, // auto-reset event + FALSE, // initial state is nonsignaled + BeforeInputEventName); // object name + if (!beforeInputEvent) { + std::cerr << "CreateEvent#1 failed " << GetLastError() << std::endl; + return 1; + } + + afterOutputEvent = CreateEventW(NULL, FALSE, FALSE, AfterOutputEventName); + if (!afterOutputEvent) { + std::cerr << "CreateEvent#2 failed " << GetLastError() << std::endl; return 1; } @@ -642,7 +647,8 @@ int testConsoleBuf(int, char*[]) ret |= testFile(); ret |= testConsole(); - CloseHandle(syncEvent); + CloseHandle(beforeInputEvent); + CloseHandle(afterOutputEvent); #endif return ret; diff --git a/testConsoleBuf.hxx b/testConsoleBuf.hxx index 855028b3b28bce075212bde89788ebcb4d1adc55..7c2f4c65a4c9c969cdb34d66d4553fb46ec6947d 100644 --- a/testConsoleBuf.hxx +++ b/testConsoleBuf.hxx @@ -14,7 +14,8 @@ static const wchar_t cmdConsoleBufChild[] = L"testConsoleBufChild"; -static const wchar_t SyncEventName[] = L"SyncEvent"; +static const wchar_t BeforeInputEventName[] = L"BeforeInputEvent"; +static const wchar_t AfterOutputEventName[] = L"AfterOutputEvent"; // यूनिकोड είναι здорово! static const wchar_t UnicodeTestString[] = L"\u092F\u0942\u0928\u093F\u0915\u094B\u0921 " diff --git a/testConsoleBufChild.cxx b/testConsoleBufChild.cxx index 3b9ab71a5f9452fd9a70d75e2b00224bf1e348fe..2da39f2858d9591e7504157f414ab04a8ba77fac 100644 --- a/testConsoleBufChild.cxx +++ b/testConsoleBufChild.cxx @@ -42,16 +42,18 @@ int main(int argc, const char* argv[]) } std::string input; - HANDLE syncEvent = OpenEventW(EVENT_MODIFY_STATE, FALSE, SyncEventName); - if (syncEvent) { - SetEvent(syncEvent); + HANDLE event = OpenEventW(EVENT_MODIFY_STATE, FALSE, BeforeInputEventName); + if (event) { + SetEvent(event); + CloseHandle(event); } std::cin >> input; std::cout << input << std::endl; - if (syncEvent) { - SetEvent(syncEvent); - CloseHandle(syncEvent); + event = OpenEventW(EVENT_MODIFY_STATE, FALSE, AfterOutputEventName); + if (event) { + SetEvent(event); + CloseHandle(event); } #else static_cast<void>(argc);