gpt4 book ai didi

c++ - GetCurrentThreadId 返回不同的 threadId

转载 作者:太空宇宙 更新时间:2023-11-04 15:03:44 28 4
gpt4 key购买 nike

我调用提到的 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 的变量 的值不同我从 Run 函数获得的 threadID。但是 Run 函数是从我在创建线程时指定的函数调用的。所以 Run 函数在我创建的同一个线程下运行。但是为什么 GetCurrentThreadId() 返回的值与 _beginthreadex 返回的值不同?

最佳答案

嗯,_beginthreadex 不返回线程 ID。线程id存储在_threadAddress中,_beginthreadex的最后一个参数。它的返回值是线程handle(类似CreateThread),而不是id。

关于c++ - GetCurrentThreadId 返回不同的 threadId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22606632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com