0

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

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

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

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

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

谢谢!

4

1 回答 1

1

在发送线程中分配和在接收线程中释放很容易,但它的主要缺点是它可能会泄漏,即使您处理发送失败,接收线程也可能在有机会执行 APC 之前完成.

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

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

于 2012-12-04T07:36:34.763 回答