さて、今回は前章の続きで、親プロセスで書き込まれた内容を
表示する子プロセス側を作ります。
/* 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