AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread anhalten

Ein Thema von Florian_Meyer · begonnen am 6. Aug 2006 · letzter Beitrag vom 6. Aug 2006
Antwort Antwort
Florian_Meyer

Registriert seit: 15. Jul 2006
Ort: Rostock
37 Beiträge
 
Delphi 2006 Professional
 
#1

Thread anhalten

  Alt 6. Aug 2006, 09:50
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.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Thread anhalten

  Alt 6. Aug 2006, 09:52
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Florian_Meyer

Registriert seit: 15. Jul 2006
Ort: Rostock
37 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Thread anhalten

  Alt 6. Aug 2006, 10:04
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 < '60then
                   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:
procedure TnewUpload.FormShow(Sender: TObject);
begin
  Thread2.Suspend;
end;
auf und dort bekomme ich die Zugriffsverletzung.

Wenn ich
Thread2.Suspend;
über einen Button im MainForm aufrufe, dann bekomme ich keinen Fehler.

MfG
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Thread anhalten

  Alt 6. Aug 2006, 11:18
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Florian_Meyer

Registriert seit: 15. Jul 2006
Ort: Rostock
37 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Thread anhalten

  Alt 6. Aug 2006, 12:02
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz