子线程负责查询数据库,获取结果。主线程根据查询结果刷新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就比较方便,可以传进多个参数。
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消