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

程式無回應問題

缺席
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-26 16:49:34 IP:61.220.xxx.xxx 未訂閱
小弟所寫的程式,發現當User在使用的時候,會常常切換到其他如office的程式,或者是Acrobat的程式,當要切回我的程式時,卻發現程式已經無回應了,常常會發生此種問題,發生時間不一定,有可能開啟程式1分鐘就發生,10~20分鐘,最長也有五六小時才發生,原程式並沒有處理很久的動作,也許只是在瀏覽資料而已,唯一有動作的是有兩個Timer元件,一個只是顯示目前時間,另一個是Client Socket在每秒鐘會跟Server Socket 溝通,讓Server Socket 接收到Client Socket 訊息。但我也將Client Socket 的SendText動作取消,還是會造成程式無回應。 這裡請教各位前輩幾個問題。 1.無回應是不是表示process已經掛了??還是其他意思?? 2.有何方向可以去尋找造成無回應的原因ㄋ??請前輩們提供經驗或意見吧~~~ 感激不盡
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-26 17:01:03 IP:218.16.xxx.xxx 未訂閱
可否 post 你兩個 Timer 的 onTimer 事件出來 ?
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-26 17:16:44 IP:210.202.xxx.xxx 未訂閱
尚未看到您的程式, 但研判可能是您的程式re-entry, 如timer的事件尚未執行完畢下一個Timer又來, 也就是您的程式無法在一秒內完成, 尤其您有到server socket溝通, 有可能網路塞車就會delay, 所以可能要做flag防止Re-Entry! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-26 17:21:28 IP:61.220.xxx.xxx 未訂閱
procedure TMainform.Timer1Timer(Sender: TObject); var SYS_TODAY: tDateTime; begin SYS_TODAY:= now(); StatusBar1.Panels[2].text:='當地時間:' DateTimeToStr(SYS_TODAY); end; procedure TMainform.Timer2Timer(Sender: TObject); begin //此段我已經mark不處理了,還是會當機。 ClientSocket1.Socket.SendText('某段字串'); end;
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-26 17:30:03 IP:218.16.xxx.xxx 未訂閱
你 Timer1 的 intervel 設多少呢?可能真的如站長大大所說的呢。平常是沒問題,但當其他程式佔用大部份系統資源時可能使 Timer 重疊了, 另直接使用 StatusBar1.Panels[2].text:='當地時間:' DateTimeToStr(NOW); 便不用多一個變數了
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-26 17:35:56 IP:61.220.xxx.xxx 未訂閱
Timer1 和 Timer 2 intervel 值都為1000
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-26 17:36:31 IP:61.220.xxx.xxx 未訂閱
Timer1 和 Timer 2 intervel 值都為1000 我試著先把其中一個拿掉試試看好了。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-26 18:09:57 IP:218.16.xxx.xxx 未訂閱
最好就試試兩個 Timer 都 Disable 掉以證實是否真的是 Timer 作怪。 另外,建議你在 MainForm 或顯示時間 的 Form 的 onDeactivate 事件 加入 Timer1.Enabled := false 及 onActivate 事件加入 Timer1.Enabled := true ,因為當轉了過其他 Form 每秒顯示時間沒用。
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-26 18:19:15 IP:61.220.xxx.xxx 未訂閱
引言: 最好就試試兩個 Timer 都 Disable 掉以證實是否真的是 Timer 作怪。 另外,建議你在 MainForm 或顯示時間 的 Form 的 onDeactivate 事件 加入 Timer1.Enabled := false 及 onActivate 事件加入 Timer1.Enabled := true ,因為當轉了過其他 Form 每秒顯示時間沒用。
在onDeactivate 只能針對同一個application,切換到其他程式要用哪個event來寫??
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-26 18:53:34 IP:218.16.xxx.xxx 未訂閱
Application.OnDeactivate 及 Application.OnActivate 如果你是用 Delphi 6/7 可在 Main Form 加入 Additional 頁的 TApplicationEvent 來設定,否則就要自行訂一個 procedure MainForm.ApplicationDeactivate(Sender : TObject); 然後在 FormCreate 加入 Application.onDeactivate := ApplicationDeactivate;
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-27 16:45:53 IP:61.220.xxx.xxx 未訂閱
我是用delphi 5 的,可是我加了ApplicationDeactivate和ApplicationActivate兩個event, 但是會遇到一個問題,當我進入mainform的之前會有個user Loginform, 當我關閉Mainform時候,會讓Loginform create,此時就會觸發application.ApplicationActivate,可是在Loginform並沒有Timer元件,會產生錯誤,小弟不知到要如何控制,請前輩再指教。謝謝 procedure TMainform.FormCreate(Sender: TObject); var i:integer; begin Application.OnActivate:=ApplicationActivate; Application.OnDeactivate:=ApplicationDeactivate; end; procedure TMainform.ApplicationDeactivate(Sender: TObject); begin Timer1.Enabled:=false; end; procedure TMainform.ApplicationActivate(Sender: TObject); begin Timer1.Enabled:=true; end;
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-27 16:56:41 IP:218.16.xxx.xxx 未訂閱
1. 你可將 Application.OnActivate:=ApplicationActivate; Application.OnDeactivate:=ApplicationDeactivate; 放在 Login 成功後 Show MainForm 時,這樣便不會被 Login Form 影響 2. 你的錯誤信息是甚麼? Timer1.Enabled := xxxx 是寫在 TMainform 的事件裡所以會自動執行成 MainForm.Timer1.Enabled := xxxx,應不會出現 Login Form 沒 Timer1 引致錯誤...會否是你的 Timer1 是動態 create 的而 Login Form 觸發application.ApplicationActivate時還沒 create ? 不過無論如何,按第1點做應可避免這錯誤。
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-03-28 12:16:58 IP:61.220.xxx.xxx 未訂閱
已經可以了,謝謝。
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-03-31 12:09:39 IP:61.220.xxx.xxx 未訂閱
前輩: 小弟把所有的timer都拿掉了,結果還是有程式發生無回應的狀態,已經不知如何去找尋問題點了~~~@@
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-03-31 12:16:25 IP:218.16.xxx.xxx 未訂閱
我們看不到你的程式便更難得知問題出在那裡了。 有可能是 socket 的問題,因為我發覺 Windsock 每次溝通都會吃掉一點記憶體的。
yabula
初階會員


發表:47
回覆:117
積分:42
註冊:2002-10-02

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-03-31 14:21:14 IP:61.220.xxx.xxx 未訂閱
真是不好意思~~~因為程式有點複雜又龐大,沒辦法貼上去給大家看,不過所有socket處理的地方,只有在timer中跑,我都已經移除掉了,真不知哪還有問題阿~~~感謝各位前輩指導,小弟只好再自行研究
系統時間:2024-04-29 10:45:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!