0
#include <stdio.h>
#include <process.h>

void sayit(void * arg) {

    printf("hello, world! from child process\n");
    _endthread();

}

int main(int argc, char ** argv) {

    if (_beginthread(sayit, 16, NULL) == -1)
        printf("Error\n");

    return 0;
}

アイデアにより、プログラムは関数内の文字列を出力する必要がありますsayitが、それは起こりません。プロセスが完了したか、まだ機能しているかを判断する機能はありますか? process.h の完全なドキュメントへのリンクを教えてください。

4

2 に答える 2

1

中断されていない状態でスレッドを開始する場合、スレッドがいつ開始されるかは保証されないため、スレッドが開始する前にプログラムが終了するか、スレッドが開始するときにプログラムが終了する可能性があります。

スレッドが確実に実行されるようにするには、次のようなことを行う必要があります

unsigned threadID = 0;
HANDLE hd = (HANDLE)_beginthreadex( NULL, 0, sayit, NULL, 0, &threadID);
WaitForSingleObject( hd, INFINITE ); // this will wait for thread to end
CloseHandle(hd);
于 2013-10-30T11:15:07.423 に答える
1

スレッドを生成しますが、それを待ちません。2 番目のスレッドが再開される前にプログラムが終了する可能性が非常に高いです。「結合」機能を持つ _beginthreadex と WaitForSingleObject または Boost.Threads を使用します。

于 2013-10-30T11:01:17.560 に答える