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

时间:2014-06-02 13:44:11

标签: c++ multithreading memory-leaks fltk

我在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'也采用了无效指针。

我意识到这实际上会造成内存泄漏,因为我不会删除数据': 我不能在使用fl_create_thread的行之后删除它,因为线程不必(或曾经)完成运行。我已经尝试删除功能结束时的指针'但这引发了两个问题

1)删除空指针是未定义的,所以我收到了警告。

2)这几乎使得使用函数失败了:是否有更好的通用编码实践?

有谁能告诉我应该如何处理这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

  

1)删除void指针是未定义的,因此我收到警告   为此。

你可能在你的函数的最开始就是一个正确类型的转换(或者你应该为了有意义地使用参数)。删除该指针而不是void *参数,您将不会收到警告。

  

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

我不确定自己的观点。这个线程接口(pthread)非常像c,所以它必须求助于void指针才能传递任意数据。您可以查看C++ thread interface以获得更多C ++方式来定义要执行的内容以及使用哪些参数

对于内存,您应该始终清除已分配内存的所有权。这种方法将所有权转移到刚刚创建的线程