主窗體的類名為:
cmodifyfiledlg
;進度條窗體的類名為:
cdlgprogress
;進度條例項作為的
cdlgprogress
成員的變數名為:
m_progressctrl (
型別為cprogressctrl)。
第一步:主窗體的按鈕事件響應。
在主窗體的按鈕事件響應中宣告進度條視窗物件,呼叫其成員函式,把引數傳給
cdlgprogress
的當前例項。
void cmodifyfiledlg::onbtnmodifyfile()
第二步:進度條視窗的成員函式
這個函式在主視窗的按鈕事件相應中被呼叫。
其作用是: 1
、接受引數,作為程序的引數傳遞給程序; 2
、建立程序,掛起的; 3
、顯示模態的程序條對話方塊; 4
、等待執行緒結束; 5
、獲取執行緒結束碼。
dword cdlgprogress::domodifyprogress(lpcstr lpszsecfilepathname,
lpcstr lpszdestfilepathname)
// 5.
獲取執行緒結束碼
dword dwret;
getexitcodethread(m_hthread, &dwret);
closehandle(m_hthread);
return dwret; //
返回結束碼 }
第三步:在進度條視窗類的
oninitdialog
函式中啟動掛起的執行緒
bool cdlgprogress::oninitdialog()
return true; }
第四步:定義執行緒函式
注意:執行緒函式如作為類的成員函式,須是靜態的
(static)
,其呼叫方式應為:
__stdcall。
static
dword winapi __stdcall thread_file(lpvoid param);
dword winapi cdlgprogress::thread_file(lpvoid param)
ularge_integer ui64srcfilesize; //
原始檔大小
// 開啟原始檔讀取資料
handle hsecfile = createfile(strsecfilepathname, generic_read,
0, null, open_existing, file_attribute_normal, null);
// 開啟要寫入資料的檔案
handle hdestfile = createfile(strdestfilepathname, generic_write,
0, null, create_always, file_attribute_normal, null);
if (!hsecfile || !hdestfile)
// 獲得原始檔大小尺寸
ui64srcfilesize.lowpart = getfilesize(hsecfile, &ui64srcfilesize.highpart);
dword dwtotleblock = (dword)(ui64srcfilesize.quadpart / 2048);
pwnd->m_progressctrl.setrange32(0, dwtotleblock);
dword dwcurretblock = 0;
byte buffer[2048];
byte bufbeg[12] = ; // 12
位元組有效
byte bufend[4] = ; // 4
位元組有效
dword dwreadbytenum; //
實際讀取的資料量
dword dwwritebytenum; //
實際寫入的資料量
// 讀取
2048
位元組資料到
buffer中
if (!readfile(hsecfile, buffer, 2048, &dwreadbytenum, null))
while (dwreadbytenum)
//
把資料分
3次寫入
if (!writefile(hdestfile, bufbeg, 12, &dwwritebytenum, null) ||
!writefile(hdestfile, buffer, dwreadbytenum, &dwwritebytenum, null) ||
!writefile(hdestfile, bufbeg, 4, &dwwritebytenum, null))
readfile(hsecfile, buffer, 2048, &dwreadbytenum, null); }
closehandle(hdestfile);
closehandle(hsecfile);
//
關閉模態視窗
while (iswindow(pwnd->m_hwnd))
return 0; }
注意:要用
while
關閉視窗,為了執行緒同步。
另外,還有定義執行緒的引數,在進度條視窗類的
cpp檔案中,是乙個結構體:
struct param_modifyfile ;
c 模態進度條
發表 靈雨飄零 閱讀 245次 關鍵字 不詳 字型 大 中 小 最近看了好多人問這方面的問題,以前我也寫過一篇blog,裡面說了如何在子執行緒中控制進度條。但目前大多數環境,需要彈出模式視窗,來顯示進度條,那麼只需要在原先的基礎上稍作修改即可。首先是進度條窗體,需要在上面新增進度條,然後去掉cont...
C 多執行緒進度條設計
在多執行緒的情況下,其它執行緒無法直接呼叫到主線程上的控制項,只能通過 來實現主線程上控制項的呼叫。1 定義委託 執行任務的委託宣告 解決長任務死假 delegate void runtaskdelegate int seconds 顯示進度條的委託宣告 跨執行緒呼叫控制項 delegate voi...
多執行緒之進度條JProgressBar
進度條jprogressbar是乙個圖形元件,用來以影象的方式顯示有介面的區間內的乙個值,進度條的乙個典型應用是顯示冗長操作完成的百分比。隨著操作的進行,它顯示乙個從左到右填充的水平矩形或下到上填充的垂直矩形,向使用者反映操作執行的進度。jprogressbar通常是通過使用乙個執行緒監視其他執行緒...