0

ファイル ストリームにアクセスし、その内容を 1 行ずつ出力する C コードを作成しています (実際には、popen() されたプロセスの std ストリームです)。ファイルにアクセスするためのsss(単純なまだ愚かな)方法を思いつきました:

static int this_event_handler(struct msg) {

...


    pFile = popen ("some command");
    while ( fgets (mystring , 100 , pFile) != NULL ) {
        puts (mystring);
    }

...

}

このコードがイベント ループをブロックし、サーバーへの今後のメッセージが役に立たなくなることはわかっています。では、イベント ループをブロックせずにこれを処理する良い方法はありますか?

たとえば、イベント駆動型のようにストリームをリッスンし、新しい行が書き込まれる/読み取られるたびに (新しいスレッドを作成せずに) イベントを発行するメソッドを探しています。

4

1 に答える 1

0

イベントループをブロックしないファイルのコンテンツを読み取る新しいスレッドを作成できます。スレッド開始関数は次のとおりです。

void* put_msg(void* arg) {
    File *pFile = (File*)arg;
    mystring[100];
    while ( fgets (mystring , 100 , pFile) != NULL ) {
        puts (mystring);
    }
    return NULL;
}

pFile を開いた直後に、イベント ハンドラーで呼び出します。

pthread_t pid;
pthread_create(&pid, NULL, &put_msg, (void*)pFile);
于 2013-05-28T12:45:09.587 に答える