在我的基于 SDL2 的程序中,我有一个处理事件队列的主线程,以及另一个定期将事件推送给它的线程。
// thread #2
event.type = UserEventType;
event.user.code = SomeCode;
event.user.data = UInt8Value;
SDL_PushEvent(&event);
主线程获取此事件,并提取数据。
// main thread
SDL_PollEvent(&event); /* ... */
Uint8 Uint8Value = event.user.data;
这个解决方案似乎并不好,因为 Uint8 和 void* 的大小不同,并且取决于平台。最安全的方法是在堆中分配 Uint8 值并通过 event.user.data 将指针传递给它,并在主线程中释放内存。但是,当您只需要传递一个字节时,为每个事件分配/释放内存不是效率低吗?也许有一个更好的解决方案也是便携的?