您使用winapi的QueueUserAPC在另一个线程中调用apc函数调用。 我的问题是,将参数传递给它的最佳做法是什么。 我指的是对象的生命周期和分配/解除分配责任。
DWORD WINAPI QueueUserAPC(PAPCFUNC pfnAPC,HANDLE hThread,ULONG_PTR dwData);
我正在使用dwData传递参数来传递指向某些数据的指针,我想知道我应该如何处理它。 我需要确保它一直存在,直到接收线程完成使用它。 我应该使用智能指针来确保数据在不再使用时被解除分配吗?
我猜这个分配在调用线程和dealloc中。接收是可能的,但可能不是一件好事。
还有什么可以做的吗? 我想我想避免两者之间的同步只是为了通知接收线程已完成数据...
谢谢!
答案 0 :(得分:1)
发送线程中的Alloc'ing和接收中的dealloc'ing很容易,但它有一个主要的缺点,它可能会泄漏,即使你处理发送失败,接收线程可能在有机会之前完成执行APC。
可能避免泄漏的最简单方法是为发送的数据创建队列 - 可以是每个线程的队列 - 当线程完成时,您遍历线程队列并释放所有待处理数据。
但像往常一样,魔鬼在细节中......