Opencl:从c样式指针创建UserEvent

时间:2017-06-22 21:57:41

标签: c++ opencl

我试图从代码的另一部分返回的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)

但是UserEvents没有这样的构造函数。他们只有:

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指针重新创建UserEvent?

1 个答案:

答案 0 :(得分:0)

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);

工作得很好