程式無回應問題 |
缺席
|
yabula
初階會員 發表:47 回覆:117 積分:42 註冊:2002-10-02 發送簡訊給我 |
小弟所寫的程式,發現當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 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
yabula
初階會員 發表:47 回覆:117 積分:42 註冊:2002-10-02 發送簡訊給我 |
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 發送簡訊給我 |
|
yabula
初階會員 發表:47 回覆:117 積分:42 註冊:2002-10-02 發送簡訊給我 |
|
yabula
初階會員 發表:47 回覆:117 積分:42 註冊:2002-10-02 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
yabula
初階會員 發表:47 回覆:117 積分:42 註冊:2002-10-02 發送簡訊給我 |
引言: 最好就試試兩個 Timer 都 Disable 掉以證實是否真的是 Timer 作怪。 另外,建議你在 MainForm 或顯示時間 的 Form 的 onDeactivate 事件 加入 Timer1.Enabled := false 及 onActivate 事件加入 Timer1.Enabled := true ,因為當轉了過其他 Form 每秒顯示時間沒用。在onDeactivate 只能針對同一個application,切換到其他程式要用哪個event來寫?? |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
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 發送簡訊給我 |
我是用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 發送簡訊給我 |
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 發送簡訊給我 |
|
yabula
初階會員 發表:47 回覆:117 積分:42 註冊:2002-10-02 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
yabula
初階會員 發表:47 回覆:117 積分:42 註冊:2002-10-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |