2

我正在使用 VC2010,并编写以下代码来测试“__beginthreadex”

#include <process.h>
#include <iostream>

unsigned int __stdcall threadproc(void* lparam)
{
    std::cout << "my thread" << std::endl;
    return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
    unsigned  uiThread1ID = 0;
    uintptr_t th = _beginthreadex(NULL, 0, threadproc, NULL, 0, &uiThread1ID);

    return 0;
}

但是没有任何东西打印到控制台。我的代码有什么问题?

4

1 回答 1

5

您的主例程立即退出,导致整个进程立即关闭,包括作为该进程一部分的所有线程。它怀疑你的新线程甚至有机会开始执行。

处理此问题的典型方法是使用WaitForSingleObject并阻塞直到线程完成。

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned  uiThread1ID = 0;
    uintptr_t th = _beginthreadex(NULL, 0, threadproc, NULL, 0, &uiThread1ID);

    // block until threadproc done
    WaitForSingleObject(th, INFINITE/*optional timeout, in ms*/);

    return 0;
}
于 2012-06-16T16:12:30.247 回答