我称之为提到的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()
返回的值?
答案 0 :(得分:6)
好吧,_beginthreadex
没有返回线程ID。线程ID存储在_threadAddress
中,_beginthreadex
的最后一个参数。它的返回值是线程句柄(如CreateThread
),而不是id。
答案 1 :(得分:2)
根据MSDN,_beginthreadex
返回线程句柄,它与线程ID不同。