【问题标题】:Creating Thread in Win32在 Win32 中创建线程
【发布时间】:2010-05-26 19:03:36
【问题描述】:

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 . . .

【问题讨论】:

标签: winapi multithreading


【解决方案1】:

要调用 CRT 函数,例如 printf,您应该使用 _beginthread_beginthreadex 而不是 CreateThread

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      不,ThreadFunc 永远不应该被调用两次。无论如何,我相信你的代码 sn-p 是不完整的——你能把完整的代码 sn-p 贴在你看到这个问题的地方吗?

      【讨论】:

        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        相关资源
        最近更新 更多