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

你产生了一个线程,但你不等待它。程序在第二个线程恢复之前结束的可能性很高。使用具有“加入”功能的 _beginthreadex 和 WaitForSingleObject 或 Boost.Threads。

于 2013-10-30T11:01:17.560 回答
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 回答