创build一个新线程(C,Windows)

好的,我在这里有点困惑。 以下代码工作:

HANDLE CreateSideThread() { DWORD dwGenericThread; HANDLE hThread1 = CreateThread(NULL, 0, CallBackFunc, NULL, 0, &dwGenericThread); return hThread1; } int main() { HANDLE Thread1; Thread1 = CreateSideThread(); WaitForSingleObject(hThread1, INFINITE); SomeOtherFunction(); return 0; } 

该程序做了其他的事情,但你明白了。 它基本上创build一个新的线程,并执行它在CallBackFunc(这是一个无限循环,检查数据库状态)。 现在,如果我删除WaitForSingleObject(),那么程序甚至不会尝试一次CallBackFunc并执行SomeOtherFunction()。 线程有什么意义? 我的意思是,我很困惑。

我试图做的是调用该线程与数据库状态的检查,并保持该线程继续我的程序,调用其他function。

我究竟做错了什么? 请发布一个示例代码段。

谢谢

如果没有WaitForSingleObject ,那么对SomeOtherFunction()调用可能会很快返回,以便在新线程甚至有机会运行一次之前退出程序。

当一个C程序从main()函数返回时,运行时系统为你调用exit() 。 即使其他线程试图同时运行,也会强行退出程序。 这与Java等其他语言形成对比,例如,在所有其他(非守护进程)线程都运行完毕之前,退出主线程将不会退出进程。

线程通常用于做后台工作,并释放调用线程来做其他事情。

通常情况下,你描述的行为(称为SomeOtherFunction())正是你想要的:我要踢一个背景'工作',并去我的生活。

看起来你的例子很好 – 但是如果你只是从main()返回,你的线程当然会终止(因为它是父进程拥有的)。

也许关于你为什么做的更多的细节不是你期望发生的事情?

你发现的是主线程在你注意到CallbackFunc被调用之前完成。 当你有等待调用,主线程被阻塞,直到新的线程完成,所以你看到正在执行的线程func。

线程并不像你想象的那么便宜,如果你用一些足够长的时间去替换SomeOtherFunction,你将会看到你的线程函数被调用,即使没有等待调用。

CallBackFunc当然会被调用,但是不能保证,当你的目标线程启动并运行时。 他们将会工作一次,但是一开始这样做是不可预测的。 这就是系统调度程序的工作和属性。 在你的情况下,当第二个函数已经被调用的时候,它们什么也不做。