在Win32中创建线程

时间:2010-05-26 19:03:37

标签: winapi multithreading

ThreadFunc()在这里被调用两次吗?有时候我会注意到一个电话,有时甚至都没有。

#include <windows.h>
#include <stdio.h>

DWORD WINAPI ThreadFunc(LPVOID);

int main()
{
    HANDLE hThread;
    DWORD threadld;

    hThread = CreateThread(NULL, 0, ThreadFunc, 0, 0, &threadld );
    printf("Thread is running\n");
}

DWORD WINAPI ThreadFunc(LPVOID p)
{
    printf("In ThreadFunc\n");
    return 0;
}

输出1

Thread is running
In ThreadFunc
In ThreadFunc
Press any key to continue . . .

输出2

Thread is running
In ThreadFunc
Press any key to continue . . .

输出3

Thread is running
Press any key to continue . . .

3 个答案:

答案 0 :(得分:4)

要调用CRT功能,例如printf,您应该使用_beginthread_beginthreadex代替CreateThread

无论如何,程序可能会在线程有机会输出任何内容之前结束。

答案 1 :(得分:2)

一点点补充:在main()中使用WaitForSingleObject让你的线程完成一个工作。

答案 2 :(得分:0)

不,ThreadFunc永远不会被调用两次。无论如何,我相信您的代码段不完整 - 您是否可以将完整的代码段发布到您遇到此问题的位置?