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