[英]deleting data sent to thread in FLTK using c++
我正在用FLTK(在C ++中)的新线程(即不是主GUI线程)执行一项由某些功能实现的长期任务。
我通过一个回调函数来实现这一点,该回调函数又创建了线程,使我具有某种形式
void callback(Fl_Widget* widget,void* passed_data){
data_type* data = new data_type;
data->value = x; //populate data structure to send to function
fl_create_thread(thread1,function,data);
}
fl_create_thread(至少出于我的目的)仅使用pthread_create,意味着数据变量作为void指针传递,因此'function'也采用void指针。
我意识到这实际上会造成内存泄漏,因为我不删除'data':由于线程未必(或曾经)完成运行,因此在fl_create_thread行之后我无法删除它。 我曾尝试删除“函数”末尾的指针,但这引发了两个问题
1)删除void指针是未定义的,因此我收到警告。
2)这几乎破坏了使用函数的目的:是否有更好的通用编码实践?
谁能告诉我该如何处理? 谢谢。
1)删除void指针是未定义的,因此我收到警告。
您可能在函数的一开始就强制转换为正确的类型(或者应该有意义地使用参数)。 删除该指针而不是void *
参数,您将不会收到警告。
2)这几乎破坏了使用函数的目的:是否有更好的通用编码实践?
不知道我明白你的意思。 此线程接口(pthread)非常类似于c,因此必须诉诸void指针才能传递任意数据。 您可以查看C ++线程接口 ,以了解更多C ++方式来定义执行内容和参数
使用内存,您应该始终清楚分配的内存的所有权。 这种方法将所有权转移到刚创建的线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.