子线程负责查询数据库,获取结果。主线程根据查询结果刷新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的指针传进去解决了这个问题,不需要全局变量。但是我还是求高手详细的讲讲线程中对全局变量的看法
米脂
相关分类