使用c++在FLTK中删除发送给线程的数据

deleting data sent to thread in FLTK using c++

本文关键字:线程 数据 删除 c++ FLTK 使用      更新时间:2023-10-16

我正在执行一个长任务,在一些函数中实现,在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 *参数,您将不会得到警告。

2)这几乎违背了使用函数的意义:是否存在更好的通用编码实践?

我不太明白你的意思。这个线程接口(pthread)非常像c语言,因此它必须借助于void指针来传递任意数据。您可以查看c++线程接口,以更c++的方式定义执行的内容和使用的参数 对于内存,您应该始终清除已分配内存的所有权。这种方法的所有权转移给刚刚创建的线程。