GetCurrentThreadId返回不同的threadId

时间:2014-03-24 10:24:05

标签: c++ multithreading winapi

我称之为提到的Windows API。但它返回的线程ID与_beginthreadex返回的id不同。我的代码正在关注,

ThreadTest *_threadTest = new ThreadTest();
Thread *_thread = new Thread(StartRoutineForThread,_threadTest);

Thread类的构造函数是

ThreadWin::ThreadWin(void * (*_startRoutine)(void *), void * _argument, bool _isJoinable)
{
        unsigned int _threadAddress;
        unsigned int threadID = _beginthreadex(
                                    NULL,
                                    0,
                                    (unsigned int (__stdcall *)(void *))_startRoutine,
                                    _argument,
                                    0,
                                    &_threadAddress
                                );
}

StartRoutineForThread函数是线程的启动例程,

void* StartRoutineForThread(void* _argument)
{
    ThreadTest *_threadTest = (ThreadTest*)_argument;
    _threadTest->Run();
    return NULL;
}
void ThreadTest::Run()
{
    this->threadID = ::GetCurrentThreadId();    
}

现在在类Thread的构造函数中,变量threadID的值与ThreadTest的变量threadID的值不同,后者是从{{{ 1}}功能。但是我在创建线程时指定的函数调用了Run函数。所以Run函数在我创建的同一个线程下运行。但是为什么Run返回的值不同于GetCurrentThreadId()返回的值?

2 个答案:

答案 0 :(得分:6)

好吧,_beginthreadex没有返回线程ID。线程ID存储在_threadAddress中,_beginthreadex的最后一个参数。它的返回值是线程句柄(如CreateThread),而不是id。

答案 1 :(得分:2)

根据MSDN,_beginthreadex返回线程句柄,它与线程ID不同。