我正在效仿"Android游戏开发手册“中的例子,创建一个跨平台线程包装器,供我自己的Android游戏引擎使用。在示例的thread类中,在某个点进行检查,查看线程句柄是否与当前线程相对应。这项工作如下:
if ( GetCurrentThread() != FThreadHandle )FThreadHandle句柄是使用前面的折叠调用分配的:
#if defined(_WIN32)
FThreadHandle = ( uintptr_t )_beginthreadex( NULL, 0, &ThreadStaticEntryPoint, ThreadParam, 0, &ThreadID );
#else
pthread_create( &FThreadHandle, NULL, ThreadStaticEntryPoint, ThreadParam );
#endifgetCurrentThread函数的定义如下:
native_thread_handle_t iThread::GetCurrentThread()
{
#if defined( _WIN32)
return GetCurrentThreadId();
#elif defined( ANDROID )
return gettid();
#else
return pthread_self();
#endif
}我的问题是:这个函数实现正确吗?我对这项实施有三项主要关注:
发布于 2014-10-11 05:05:48
我只想评论一下(Win32)部分。
上面写着:
“检索调用线程的伪句柄。”
换句话说,如果您从不同的线程调用它,每个线程可能收到相同的假句柄。或者,换句话说,返回的值可能只是一个常量值,被Win32 API识别为表示当前线程的占位符。
我不知道需要做什么才能得到一个真正的,独特的线程句柄。
我正在看OpenThread (Win32)函数,但我自己还没有试过。
需要记住的一点是,在Windows上,“句柄”是在使用后需要清理的资源。对于每个"OpenSomething“函数,请仔细阅读文档,看看是否需要在使用后调用"CloseSomething”。此外,不要假设句柄释放函数始终具有与创建/复制函数相同的名称。不这样做可能会破坏系统的稳定。
最后但并非最不重要的是:尝试在旧的新事物上搜索。
https://stackoverflow.com/questions/26039042
复制相似问题