多執行緒建立模態進度條視窗

2021-04-02 17:23:25 字數 2784 閱讀 6649

主窗體的類名為:

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通常是通過使用乙個執行緒監視其他執行緒...