为了账号安全,请及时绑定邮箱和手机立即绑定

当我把该变量变为线程里的局部变量时就不会内存泄露了,但是在我的主线程中又获取不到查询结果了?

当我把该变量变为线程里的局部变量时就不会内存泄露了,但是在我的主线程中又获取不到查询结果了?

C++
ABOUTYOU 2023-03-03 14:10:26
子线程负责查询数据库,获取结果。主线程根据查询结果刷新listcontrol列表。我开始定义了一个全局变量(而非类成员变量)用来保存查询的结果,当我程序退出后提示有内存泄露。#include A.hvector<type> m_result; //record_datas_struct:自定义结构体保存查询结果,结构体中使用了vectorvoid A::Query() //查询函数中调用线程{A obj;boost::thread thrd(boost::bind(&A::ThreadQurey,&obj,m_condition)); //m_condition:查询条件}LRESULT A::ListItemRefresh(WPARAM wParam, LPARAM lParam) //消息响应函数{刷新ListControl}void A::ThreadQuery(const vector<condition> &vec_condition) //condition:自定义结构体 线程函数{/*执行查询*/::PostMessage(hwnd,WM_QUERY_END_MSG,0,0); //查询结束抛消息,上面的ListItemRefresh会响应}我将ListControl的指针传进去解决了这个问题,不需要全局变量。但是我还是求高手详细的讲讲线程中对全局变量的看法
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

全局变量和你传进线程的变量,类似。都是需要用线程锁来进行同步访问的。
全局变量用到线程里,以前是为了方便,不需要每次将变量传进函数里。因为CreateThread太麻烦,只能传进一个指针。现在用Boost就比较方便,可以传进多个参数。

查看完整回答
反对 回复 2023-03-06
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信