/* pipe01child.c */ #include <stdio.h> #include <conio.h> #include <windows.h> DWORD WINAPI MyThreadProc(LPVOID); HANDLE hRead, hThread; DWORD dwThreadID; int main() { hRead = GetStdHandle(STD_INPUT_HANDLE); if (hRead == INVALID_HANDLE_VALUE) { MessageBox(NULL, "GetStdHandle Error", "OK", MB_OK); return -1; } else { hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThreadProc, NULL, 0, &dwThreadID); if (!hThread) { MessageBox(NULL, "CreateThread Error", "OK", MB_OK); return -2; } } WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); return 0; } DWORD WINAPI MyThreadProc(LPVOID lpParam) { DWORD dwResult; BOOL bSuccess; char szBuf[256]; MessageBox(NULL, "スレッドが作られました", "OK", MB_OK); while (1) { bSuccess = ReadFile(hRead, szBuf, sizeof(szBuf), &dwResult, NULL); if (!bSuccess) { break; } if (strcmp(szBuf, "end") == 0) break; MessageBox(NULL, szBuf, "OK", MB_OK); Sleep(100); } MessageBox(NULL, "スレッドを抜けます", "OK", MB_OK); return 0; }ここで、作ったプログラムを前章で作ったpipe01.exeと同じディレクトリに置きます。 そして、pipe01.exeを起動します。
すると「スレッドが作られました」という、メッセージボックスが出現します。 そして、コンソールウィンドウにはメニューが表示されます。
このメニューの「1.パイプに書き込む」を選択します。
そして、適当な文字列を書き込みます。
すると、その文字列がメッセージボックスで表示されます。
メニューの0を選択すると、「スレッドを抜けます」というメッセージボックスが出現します。そして、プログラムが終了します。
コンソールアプリケーションなのに、メッセージボックスを使うのは少し反則ですが、 これは、ちょっと仕方のないことです。(メッセージボックスを使わないとどうなるか 実験してみてください。)
Update Feb/12/2006 By Y.Kumei