子線程負(fù)責(zé)查詢數(shù)據(jù)庫,獲取結(jié)果。主線程根據(jù)查詢結(jié)果刷新listcontrol列表。我開始定義了一個全局變量(而非類成員變量)用來保存查詢的結(jié)果,當(dāng)我程序退出后提示有內(nèi)存泄露。#include A.hvector<type> m_result; //record_datas_struct:自定義結(jié)構(gòu)體保存查詢結(jié)果,結(jié)構(gòu)體中使用了vectorvoid A::Query() //查詢函數(shù)中調(diào)用線程{A obj;boost::thread thrd(boost::bind(&A::ThreadQurey,&obj,m_condition)); //m_condition:查詢條件}LRESULT A::ListItemRefresh(WPARAM wParam, LPARAM lParam) //消息響應(yīng)函數(shù){刷新ListControl}void A::ThreadQuery(const vector<condition> &vec_condition) //condition:自定義結(jié)構(gòu)體 線程函數(shù){/*執(zhí)行查詢*/::PostMessage(hwnd,WM_QUERY_END_MSG,0,0); //查詢結(jié)束拋消息,上面的ListItemRefresh會響應(yīng)}我將ListControl的指針傳進(jìn)去解決了這個問題,不需要全局變量。但是我還是求高手詳細(xì)的講講線程中對全局變量的看法
1 回答

米脂
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個贊
全局變量和你傳進(jìn)線程的變量,類似。都是需要用線程鎖來進(jìn)行同步訪問的。
全局變量用到線程里,以前是為了方便,不需要每次將變量傳進(jìn)函數(shù)里。因?yàn)镃reateThread太麻煩,只能傳進(jìn)一個指針?,F(xiàn)在用Boost就比較方便,可以傳進(jìn)多個參數(shù)。
- 1 回答
- 0 關(guān)注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消