第121章 匿名パイプ その3


さて、今回は前章の続きで、親プロセスで書き込まれた内容を 表示する子プロセス側を作ります。



/* 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を選択すると、「スレッドを抜けます」というメッセージボックスが出現します。そして、プログラムが終了します。

コンソールアプリケーションなのに、メッセージボックスを使うのは少し反則ですが、 これは、ちょっと仕方のないことです。(メッセージボックスを使わないとどうなるか 実験してみてください。)


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Feb/12/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。