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

子线程负责查询数据库,获取结果。主线程根据查询结果刷新listcontrol列表。
我开始定义了一个全局变量(而非类成员变量)用来保存查询的结果,当我程序退出后提示有内存泄露。
#include A.h
vector<type> m_result; //record_datas_struct:自定义结构体保存查询结果,结构体中使用了vector

void 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的指针传进去解决了这个问题,不需要全局变量。但是我还是求高手详细的讲讲线程中对全局变量的看法

ABOUTYOU
浏览 101回答 1
1回答

米脂

全局变量和你传进线程的变量,类似。都是需要用线程锁来进行同步访问的。全局变量用到线程里,以前是为了方便,不需要每次将变量传进函数里。因为CreateThread太麻烦,只能传进一个指针。现在用Boost就比较方便,可以传进多个参数。
打开App,查看更多内容
随时随地看视频慕课网APP