AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Thread startet aber macht nicht fertig
Thema durchsuchen
Ansicht
Themen-Optionen

Thread startet aber macht nicht fertig

Ein Thema von rtky_trunks · begonnen am 25. Sep 2006 · letzter Beitrag vom 12. Okt 2006
Antwort Antwort
Seite 2 von 3     12 3      
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#11

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 09:44
Der Thread ist der einzige zusätzliche Thread neben dem Hauptprogramm.

"Test" wird im Hauptformular aufgerufen (bzw soll aufgerufen werden) und sieht so aus :

Delphi-Quellcode:
procedure TAdvNavForm.Test;
begin
  ShowMessage('TestThreadAufruf');
end;
inc(i);
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#12

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 09:59
Hab das probiert, bei mir läufts.
Das Meldungsfenster kommt.

Bei Dir nicht?
Zeig mal die ganze Unit.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#13

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 10:15
Delphi-Quellcode:
unit UThreadCheckForNew;

interface

uses
  Classes,comctrls,sysutils,dialogs;

type
  TCheckForNewInPostkorbThread = class(TThread)
  private
   fNodeToCheck:string;
   procedure CheckForNew;
   procedure MarkNode;
    { Private-Deklarationen }
  public
   Liste:TStringList;
  protected
    procedure Execute; override;
  end;

implementation

uses navform;

{ TCheckForNewInPostkorbThread }

procedure TCheckForNewInPostkorbThread.checkfornew;
 var
  node:string;
  search:TDVSearch; // eigene Komponente die hier aber nichts zur Sache tut
  i : integer;
  res:integer;
begin
  search:=TDVSearch.Create(nil);
  for i:=0 to Liste.Count-1 do
   begin
    node:=trim(Liste.Strings[i]);
    res:=search.SRVSearch;
    if res <> 0 then
     begin
      factive:=false;
      MessageDlg('Es ist ein Fehler aufgetreten',mtError,[mbok],0);
      break;
     end;
    if search.Items.Count > 0 then
     begin
      fNodeToCheck:=node;
      Synchronize(markNode);
     end;
   end;
  search.Free;
end;

procedure TCheckForNewInPostkorbThread.Execute;
begin
  CheckForNew;
  Liste.Free;
end;


procedure TCheckForNewInPostkorbThread.MarkNode;
begin
 AdvNavForm.Test;
end;

end.
inc(i);
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#14

Thread startet aber macht gleich fertig

  Alt 12. Okt 2006, 10:21
Der Fehler liegt wo anders...

Das kann nicht funktionieren weil...
Delphi-Quellcode:
procedure TCheckForNewInPostkorbThread.Execute;
begin
  CheckForNew;
  Liste.Free;
  // ... Du da raus fliegst
end;
So geht's:
Delphi-Quellcode:
procedure TCheckForNewInPostkorbThread.Execute;
begin
  While not Terminated do begin
     CheckForNew;
     Sleep(1000); // Verschnaufpause, damit der Thread nicht mit 100% CPU läuft.
     // Da fliegst Du nicht mehr raus
  end;

  Liste.Free;
end;
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#15

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 10:32
Das ich nach einem Durchlauf rausfliege ist momentan schon in Ordnung nur müsste die Methode "markNode" doch trotzdem einmal durchlaufen werden, oder?
inc(i);
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#16

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 10:36
Wenn "search.Items.Count>0" True ergibt schon.

Versuch mal ob's dann funkt: (search.Items.Count>0) or True
Dann weißt Du ob's generell funkt oder nicht.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#17

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 10:43
Es ist größer 0. Wie gesagt, ich komme ja ohne Probleme bis ...

Delphi-Quellcode:
    if search.Items.Count > 0 then
     begin
      fNodeToCheck:=node;
        // ...hier !!
      Synchronize(markNode);
     end;
Nur danach ist dann Schluss. In "MarkNode" geht er nicht rein und in Synchronize auch nicht.
inc(i);
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#18

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 10:56
Wo hast Du die StringList her?

Die wird in dem Thread niergends erstellt.

Zeig auch mal die Unit navform.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#19

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 11:06
Komplett ist die zu groß, aber hier mal die relevanten Teile:
Delphi-Quellcode:
unit NavForm;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, OleCtrls, SHDocVw, ComCtrls, ImgList, ExtCtrls, MyFunct, uBase,
  uGroup, uDocumentType,vgbConstants,uconst, uRepository,vgbfunctions,usearch,
  main, uthreadcheckfornew;

type
  TAdvNavForm = class(TForm)
    // ...
    procedure FormCreate(Sender: TObject);
    procedure Test;
  private
   chkfrnw : TCheckForNewInPostkorbThread;
  end;

var
  AdvNavForm: TAdvNavForm;

implementation

uses logoform,global, DateUtils, UInfo;

{$R *.DFM}


procedure TAdvNavForm.FormCreate(Sender: TObject);
// ...
  chkfrnw:=TCheckForNewInPostkorbThread.Create(true);
  chkfrnw.Liste:=TStringList.Create;
  chkfrnw.Liste.Assign(vgbAvailablePostkoerbe); // vgbAvailablePostkoerbe ist eine bestehende Stringlist
// ...
  chkfrnw.Resume;
end;

procedure TAdvNavForm.Test;
begin
  ShowMessage('TestThreadAufruf');
end;

end.
inc(i);
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#20

Re: Thread startet aber macht nicht fertig

  Alt 12. Okt 2006, 11:19
Das sollte man nicht machen:

Delphi-Quellcode:
chkfrnw.Liste:=TStringList.Create;
chkfrnw.Liste.Assign(vgbAvailablePostkoerbe);
Besser wäre es, die StringListe als Parameter in der Create Methode des Threads zu übergeben, da sie sonst ein Teil des VCL Threads ist und aber ohne Synchronize in Deinem Thread verwendet wird.
Außerdem startet der Thread bevor/während/nachdem die Liste erstellt wird, dies ist eine potentielle Fehlerquelle.

PS: Wenn Du die StringListe aus dem Thread heraus vom VCL Thread Updaten mußt, nur über Synchronize.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 06:05 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