winapi apc函数参数传递 - 什么是最佳实践

时间:2012-12-04 07:23:24

标签: multithreading winapi

您使用winapi的QueueUserAPC在另一个线程中调用apc函数调用。 我的问题是,将参数传递给它的最佳做法是什么。 我指的是对象的生命周期和分配/解除分配责任。

DWORD WINAPI QueueUserAPC(PAPCFUNC pfnAPC,HANDLE hThread,ULONG_PTR dwData);

我正在使用dwData传递参数来传递指向某些数据的指针,我想知道我应该如何处理它。 我需要确保它一直存在,直到接收线程完成使用它。 我应该使用智能指针来确保数据在不再使用时被解除分配吗?

我猜这个分配在调用线程和dealloc中。接收是可能的,但可能不是一件好事。

还有什么可以做的吗? 我想我想避免两者之间的同步只是为了通知接收线程已完成数据...

谢谢!

1 个答案:

答案 0 :(得分:1)

发送线程中的Alloc'ing和接收中的dealloc'ing很容易,但它有一个主要的缺点,它可能会泄漏,即使你处理发送失败,接收线程可能在有机会之前完成执行APC。

可能避免泄漏的最简单方法是为发送的数据创建队列 - 可以是每个线程的队列 - 当线程完成时,您遍历线程队列并释放所有待处理数据。

但像往常一样,魔鬼在细节中......