为什么不起作用? Windows,使用process.h

时间:2013-10-30 10:45:46

标签: c windows

#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的完整文档吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);