全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2048
推到 Plurk!
推到 Facebook!

做煙火多執行緒的問題

 
13fri
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-25 14:12:22 IP:163.28.xxx.xxx 未訂閱
請問各位大大啊 小弟我正在寫一個煙火程式 目前卡在一個多執行緒的問題 因為我要在按下滑鼠時就要有煙火發射 所以做了一個物件如下 unit1.cpp TForm1 *Form1; TThread *FireUp; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { FireUp=new Fire(false,X,Y); FireUp->Resume(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { delete FireUp; } unit2.cpp __fastcall Fire::Fire(bool CreateSuspended,int x,int y) : TThread(false) { this->Mouse_x=x; this->Mouse_y=y; } //------------------------------------------------------------------------- void __fastcall Fire::Execute() { for(int y=400;y>=Mouse_y;y-=3) { this->FirePrint(Mouse_x,y-3,Mouse_x,y,clRed); Sleep(50); this->FirePrint(Mouse_x,y-3,Mouse_x,y,clBlack); } } //------------------------------------------------------------------------- void Fire::FirePrint(int x1,int y1,int x2,int y2,TColor pencolor) { Form1->Canvas->Pen->Width=3; Form1->Canvas->Pen->Color=pencolor; Form1->Canvas->Pen->Style =psSolid; Form1->Canvas->MoveTo(x1,y1); Form1->Canvas->LineTo(x2,y2); } 問題是目前只要我同時產生出太多的煙火 還沒到要爆的地方就停著不動了 是因為我只用一個指標(FireUp)的原因嗎? 請各位大大幫小弟解答一下 謝謝 PS: 拜託 請盡量不要給我你們以前寫的程式原始碼 (給我我就會想抄了) 給我提示就好 我想自己寫出來 謝謝
dllee
站務副站長


發表:319
回覆:2516
積分:1710
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-25 15:03:57 IP:61.231.xxx.xxx 未訂閱
依您的程式碼 unit1.cpp 中, TThread *FireUp; 只有「一個」,但是在每次 FormMouseDown 時您就 new 一次,而每 new 一次,其前一次所記錄下來的指標就已經不見了。 在此最好使用一個陣列 int iTotalFireUp; TThread *FireUp[100]; 來存所有 new 出來的指標,以上是最多限制 100 個煙火,如果您想要無限制,可以使用 TList 來存 TThread 的指標。 至於 unit2.cpp ,因個人不熟 TThread 所以不知.....
------
http://blog.yam.com/dllee/
13fri
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-25 15:10:28 IP:163.28.xxx.xxx 未訂閱
謝謝回應 但是我試過了 會有一樣的問題
13fri
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-06-25 15:12:03 IP:163.28.xxx.xxx 未訂閱
給想幫我解答的人 這是我做出來的程式和原始碼 請幫我看看是啥問題 大概只要同時產生4個煙火就會有問題 http://home.pchome.com.tw/boy/13fri/debug/Fire.exe 謝謝
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-06-25 15:31:34 IP:61.218.xxx.xxx 未訂閱
這裡有一個非TThread方法寫的範例! 讓您腦力激盪一下,搞不好就能把TThread方法的煙火寫出來喔! 資料來源:資訊小痞子 http://netcity3.web.hinet.net/userdata/k1228341/firsouce.zip
richard
一般會員


發表:0
回覆:3
積分:0
註冊:2002-03-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-06-26 13:25:26 IP:210.243.xxx.xxx 未訂閱
背景執行緒..不可以用前景的vcl元件 因為資料會讀寫不全 要用的話,要這樣用 Synchronize(UpdateCaption); where UpdateCaption could look like: void __fastcall Unit2::UpdateCaption() { Form1->Caption = "Updated in a thread"; } write program togather
------
write program togather
13fri
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-06-26 14:23:19 IP:163.28.xxx.xxx 未訂閱
謝謝各位 問題已經算是大部分解決了 不過現在畫面會閃爍 是因為沒用DRAW嗎 我把修改後的程式碼 放到上面的網址了 請幫忙看看 謝謝
系統時間:2017-12-11 19:22:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!