一個線程錯誤問題 |
答題得分者是:mustapha.wang
|
figo
初階會員 發表:47 回覆:70 積分:28 註冊:2004-12-18 發送簡訊給我 |
access violation at address 00426f0f in module'MHaccountiong.exe'.read of address 0000000ethread CODE unit logout_thread; interface uses Classes, SysUtils, Forms; type checkusername = class(TThread) private { Private declarations } protected i: integer; procedure Execute; override; procedure checkuser; end; implementation uses mhacmain, mhacdata, DB; { Important: Methods and properties of objects in visual components can only be used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure checkusername.UpdateCaption; begin Form1.Caption := 'Updated in a thread'; end; } { checkusername } procedure checkusername.checkuser; begin i := i 1; frmAcMain.Edit1.Text := inttostr(i); end; procedure checkusername.Execute; begin while true do begin i := 0; Synchronize(checkuser); end; { Place thread code here } end; end.FROM1 CODE unit MhAcMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Menus, StdCtrls, Mask, wwdbedit, Grids, Wwdbigrd, Wwdbgrid; type TfrmAcMain = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; N8: TMenuItem; Panel1: TPanel; N9: TMenuItem; N10: TMenuItem; Image1: TImage; Label1: TLabel; Label2: TLabel; buLogin: TButton; bulogout: TButton; N2: TMenuItem; N11: TMenuItem; edUserName: TEdit; edPassword: TEdit; pnlogin: TPanel; Meworngmessage: TMemo; N12: TMenuItem; Edit1: TEdit; procedure N8Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N9Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure N11Click(Sender: TObject); procedure buLoginClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure MeworngmessageKeyPress(Sender: TObject; var Key: Char); procedure bulogoutClick(Sender: TObject); procedure N12Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public wronglogin: integer; procedure visibleTitle; procedure showSTR(s: string); procedure logout; { Public declarations } end; var frmAcMain: TfrmAcMain; implementation uses MhAcItem, MhAcCtar, MhGood, MhLedger, MhAcData, DBTables, DB, MhEditlogin, StrUtils, Wwquery, logout_thread; var ti: checkusername; 調用時用 ti.Suspend; 停止時用 ti := checkusername.Create(false); ti.Resume;謝謝回答 |
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
|
figo
初階會員 發表:47 回覆:70 積分:28 註冊:2004-12-18 發送簡訊給我 |
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
下面两个问题先不看,我试了没有发现错误。
1.ti摧毁与否不谈,
2.MainForm关闭时,如果thread没有停下来,可能还是会访问到已经摧毁的MainForm。 你是不是没有按Button1就直接按了Button2???
var ti: checkusername; procedure checkusername.checkuser; begin i := i + 1; Form1.Edit1.Text := inttostr(i); end; procedure checkusername.Execute; begin i := 0; while true do begin Synchronize(checkuser); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ti := checkusername.Create(false); ti.Resume; end; procedure TForm1.Button2Click(Sender: TObject); begin ti.Suspend; end;久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
figo
初階會員 發表:47 回覆:70 積分:28 註冊:2004-12-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |