![]() |
Thread anhalten
Hallo,
ich habe meine Hauptform, auf die wird etwas per Thread synchronisiert geschrieben. Nun möchte ich aber in einem zweiten Fenster den anderen Thread kurz analten: per Thread.Suspend; Allerdings klappt das leider nicht ganz so, wie ich mir das vorgestellt habe, denn ich bekomme eine AV. Kann mir jemand sagen, was ich falsch mache?
Delphi-Quellcode:
procedure TnewUpload.FormShow(Sender: TObject);
begin Thread2.Suspended; end;
Delphi-Quellcode:
procedure TnewUpload.FormClose(Sender: TObject; var Action: TCloseAction);
begin Thread2.Resume; end; MfG F.M. |
Re: Thread anhalten
Hallo,
der Code, den Du zeigst, ist erstmal richtig. Leider zeigt er aber nicht das Problem. Wo genau tritt denn die AV auf? Wie lautet die genaue Fehlermeldung? Zeig mal etwas mehr Code. Gruß xaromz |
Re: Thread anhalten
Ok, also der Fehler tritt auf, wenn ich das Fenster mit ShowModal; aufrufe.
Delphi-Quellcode:
procedure TnewUpload.FormClose(Sender: TObject; var Action: TCloseAction);
begin Thread2.Resume; end; procedure TnewUpload.FormShow(Sender: TObject); begin Thread2.Suspend; end; procedure TnewUpload.SaveUpload; begin if eServer.Text = '' then MessageBox(0,'Bitte geben Sie einen Server ein!','Server eingeben',MB_OK + MB_ICONSTOP) else if ePort.Text = '' then MessageBox(0,'Bitte geben Sie einen Port ein!','Port eingeben',MB_OK + MB_ICONSTOP) else if eUser.Text = '' then MessageBox(0,'Bitte geben Sie einen Benutzernamen ein!','Benutzername eingeben',MB_OK + MB_ICONSTOP) else if ePassword.Text = '' then MessageBox(0,'Bitte geben Sie ein Passwort ein!','Passwort eingeben',MB_OK + MB_ICONSTOP) else if eQPath.Text = '' then MessageBox(0,'Bitte geben Sie einen Quellpfad ein!','Quellpfad eingeben',MB_OK + MB_ICONSTOP) else if eSPath.Text = '' then MessageBox(0,'Bitte geben Sie einen Serverpfad ein!','Serverpfad eingeben',MB_OK + MB_ICONSTOP) else if eIntervall.Text = '' then MessageBox(0,'Bitte geben Sie ein Intervall ein!','Intervall eingeben',MB_OK + MB_ICONSTOP) else if eIntervall.Text < '60' then MessageBox(0,'Das Intervall muss mindestens 60 Sekunden betragen!','Intervall zu klein',MB_OK + MB_ICONSTOP) else begin MainForm.ABSDatabase1.Connected := true; MainForm.UploadTable.Active := true; with MainForm.UploadTable do begin Insert; FieldByName('sServer').AsString := eServer.Text; FieldByName('iPort').AsString := ePort.Text; FieldByName('sUser').AsString := eUser.Text; FieldByName('sPassword').AsString := ePassword.Text; FieldByName('sQPath').AsString := eQPath.Text; FieldByName('sSPath').AsString := eSPath.Text; FieldByName('iIntervall').AsString := eIntervall.Text; FieldByName('lAuto').AsVariant := cbAuto.Checked; Post; end; ClearForm; MainForm.UpdateUploads; MainForm.UploadTable.Active := false; MainForm.ABSDatabase1.Connected := false; Close; end; end; procedure TnewUpload.bSaveClick(Sender: TObject); begin SaveUpload; end; Dort rufe ich ja dann
Delphi-Quellcode:
auf und dort bekomme ich die Zugriffsverletzung.
procedure TnewUpload.FormShow(Sender: TObject);
begin Thread2.Suspend; end; Wenn ich Thread2.Suspend; über einen Button im MainForm aufrufe, dann bekomme ich keinen Fehler. MfG |
Re: Thread anhalten
Hallo,
wo ist denn Thread2 deklariert? Hast Du vielleicht in Deinem zweiten Form einen Thread gleichen Namens, der nicht initialisiert wurde? Setz mal einen Breakpoint und gehe dann mit Einzelschritten durch, bis Du zu der Anweisung kommst, die den Fehler verursacht. Gruß xaromz |
Re: Thread anhalten
Hallo,
also danke für deine Bemühungen, aber ich hab das im Programm jetzt anders gelöst, so dass ich den Thread dort nicht mehr unterbrechen muss, aber trotzdem danke! MfG Florian Meyer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz