Opencl:从 c 样式指针创建 UserEvent



我正在尝试从代码的另一部分返回的 C 指针重新创建一个 UserEvent 对象:

uintptr_t get_event_ptr(); // returns cl_event pointer to user event, comes from pyopencl

uintptr_t evt_ptr = get_event_ptr();

C++中的事件具有以下构造函数:

Event (const cl_event &event, bool retainObject=false)

但是用户事件没有这样的构造函数。他们所拥有的只是:

UserEvent (const Context &context, cl_int *err=NULL)
UserEvent ()

我尝试过静态强制转换,重新解释转换和动态转换,但无济于事:

dynamic_cast

cl::UserEvent* ue = dynamic_cast<cl::UserEvent*> (new cl::Event(*((const cl_event*) evt_ptr)));
error: 'cl::Event' is not polymorphic

static_cast

cl::UserEvent* ue = static_cast<cl::UserEvent*> (new cl::Event(*((const cl_event*) evt_ptr)));
ue->setStatus(CL_COMPLETE);
Segmentation fault: 11

reinterpret_cast

cl::UserEvent* ue = reinterpret_cast<cl::UserEvent*> (new cl::Event(*((const cl_event*) evt_ptr)));
ue->setStatus(CL_COMPLETE);
Segmentation fault: 11

using parent constructor

cl::UserEvent* ue = new cl::UserEvent((const cl_event&)(*((const cl_event*) evt_ptr)));
error: no matching constructor for initialization of 'cl::UserEvent'

如何从 C 指针重新创建用户事件?

cl_event是typedef'd作为指针,而不是opencl抽象类型。因此,应将其设置为 AS evt_ptr,而不是 *evt_ptr。

cl::UserEvent* ue = static_cast<cl::UserEvent*> (new cl::Event((cl_event) evt_ptr));
ue->setStatus(CL_COMPLETE);

工作正常

最新更新