繁体   English   中英

使用C ++删除发送到FLTK中的线程的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM