使用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 *
参数,您将不会得到警告。
我不太明白你的意思。这个线程接口(pthread)非常像c语言,因此它必须借助于void指针来传递任意数据。您可以查看c++线程接口,以更c++的方式定义执行的内容和使用的参数 对于内存,您应该始终清除已分配内存的所有权。这种方法将的所有权转移给刚刚创建的线程。2)这几乎违背了使用函数的意义:是否存在更好的通用编码实践?
相关文章:
- 在cuda线程之间共享大量常量数据
- 将线程中的数据存储到全局容器的最佳方法?
- 线程之间的实时数据共享
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 在线程函数中处理数据向量时进行线程竞速
- 使来自线程的数据流对所有其他线程都可读
- 简单使用 std::atomic 在两个线程之间共享数据
- 为什么添加延迟会提高此多线程环境中的数据吞吐量?
- 跨线程共享数据集与拆分每个线程的数据
- 标准 cpp 数据结构和线程互斥锁?
- 在std::线程中使用已分配的结构数据
- 多个线程将数据发送到数组C++
- Qt C++ - 如何将数据从工作线程传递到主线程?
- 在使用 std::cout 和多线程程序中如何避免数据竞争<iomanip>?
- 充分私有化 OpenMP 线程中的数据
- 用于在C++中计算用户数据的线程
- 在不减慢线程速度的情况下保存大量数据
- 线程数据封装最佳实践
- Apache 崩溃并显示错误 R6016 没有足够的空间来存储线程数据