關於thread的使用 |
答題得分者是:taishyang
|
wei0510
一般會員 發表:9 回覆:2 積分:2 註冊:2009-05-19 發送簡訊給我 |
我在討論區上讀了幾篇介紹多執行緒的文章,但實際使用上還是無法成功,想向各位先進們請教一下:
我建立了一個form,上面放了一個Button及ProgressBar,當點選Button後先將Button給Disable,接著建立一個執行緒以0.5秒的速度讓ProgressBar的Position增加,並且於Form的部份執行外部程式,當執行的外部程式結束後,關閉跑ProgressBar的執行緒,並且將Position以0.1秒的速度跑至100%。 下面是我的程式片段 Thread.cpp: [code cpp] void __fastcall TMyThread::Execute() { SetName(); //---- Place thread code here ---- Synchronize(ProgressBarAdd); //因為ProgressBar1是VCL元件所以透過Synchronize執行 } //--------------------------------------------------------------------------- void __fastcall TMyThread::ProgressBarAdd() { while(1) { //每0.5秒ProgressBar1加1%: Sleep(500) ; Form1->ProgressBar1->Position = (Form1->ProgressBar1->Position 1) ; } }[/code] main.cpp: [code cpp] __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { MyThread = new TMyThread(true) ; //建立一個新的執行緒並預設暫停。 } void __fastcall TForm1::Button1Click(TObject *Sender) { //重置ProgressBar1: ProgressBar1->Max = 100 ; ProgressBar1->Min = 0 ; ProgressBar1->Position = 0 ; Button1->Enable->false; //關閉按鈕 MyThread->Resume() ; //開始跑執行緒 RunEXE() ; // 呼叫外部程式 MyThread->Suspend(); //關閉執行緒 //用0.1秒的速度把ProgressBar1跑至100%: int i ; for( i = ProgressBar1->Position ; i <= 100 ; i = i 1) { Sleep(100) ; ProgressBar1->Position = i ; } Button1->Enable->true; //關閉按鈕 } [/code] 我所遇到問題有兩個: 1.按下按鈕後,新增的執行緒並沒有執行。 2.當動作完成後(Button1->Enable = true後),整個程式會變成當機的狀態,但如果把 MyThread->Resume() ; //開始跑執行緒 MyThread->Suspend(); //關閉執行緒 兩行註解掉,就沒事了。 我想兩個問題都出在執行緒的操作上,但我還是找不出原因,請問有使用過多執行緒的先進們是不是能給我一些建議呢? |
wei0510
一般會員 發表:9 回覆:2 積分:2 註冊:2009-05-19 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |