Autor Beitrag
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Sa 01.11.14 09:48 
Hallo liebe Delphi-Helfer :)

Ich muss mich mal wieder mit den Parallelprozessen beschäftigen und bekomme das einfach nicht richtig hin...

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
type
  TFÜFehlerprotokoll = class(TThread)
    function Do_Vorbereiten(pbAlleDaten: Boolean): Boolean;
  end;

type
  T_FÜ = class(TDataModule)
    TimerZeit: TTimer;
    procedure TimerZeitTimer(Sender: TObject);


function TFÜFehlerprotokoll.Do_Vorbereiten(pbAlleDaten: Boolean): Boolean;
const
  sFeldliste = ' NUMMER, FEHLERART ';
var
  cListe: TStringlist;
  cSQL: TIBSQL;
  sSQLAnfang, sSQLMitte, sZelle: String;
  f: Integer;
begin
  _FÜ.Do_Logbuch_schreiben('Fehlerprotokoll vorbereiten (neu).');

  // Variable initialisieren
  Result := False;
  cListe := TStringlist.Create;
  cSQL := TIBSQL.Create(_FÜ);
  _Global.Do_Komponente_Initialisieren(TPersistent(cSQL), _FÜ.FÜDaten.IBDatenbank,
    _FÜ.FÜDaten.FBDatenbankdatei);

  // Protokolle öffnen und lesen
  try
    try
      _FÜ.FÜDaten.Fehlerprotokolldatum := Now;
      cSQL.ExecQuery;
      while not cSQL.Eof do
      begin
        // Feldliste durchlaufen
        sSQLMitte := '(';
        for f := 0 to cSQL.FieldCount - 1 do
        begin
          sZelle := cSQL.Fields[f].AsTrimString;
          sZelle := StringReplace(sZelle, Chr(39), '', [rfReplaceAll]);
          if sSQLMitte = '(' then
            sSQLMitte := sSQLMitte + Chr(39) + sZelle + Chr(39)
          else
            sSQLMitte := sSQLMitte + ', ' + Chr(39) + sZelle + Chr(39);
        end;
        sSQLMitte := sSQLMitte + ');';
        cListe.Add(sSQLAnfang);
        cListe.Add(sSQLMitte);

        // Nächster Satz
        cSQL.Next;
      end;

      // Ende
      Result := True;
    except
    end;
  finally
    _Global.Do_Komponente_Auflösen(TPersistent(cSQL));
  end;
  cListe.Add('COMMIT WORK;');

  // Protokoll speichern
  cListe.SaveToFile(_FÜ.FÜDaten.FÜFehlerprotokolldatei);
  _Global.Do_Komponente_Auflösen(TPersistent(cListe));
  _FÜ.Do_Logbuch_schreiben('Fehlerprotokoll vorbereitet (neu).');
end;

procedure T_FÜ.TimerZeitTimer(Sender: TObject);
begin
  if FÜDaten.DebugModus then
    Do_DebugLogbuch_schreiben('TimerTimer')
  else
    if FormatDateTime('ss', Now) = '00' then
      Do_DebugLogbuch_schreiben('TimerTimer');
end;


Der Timer schreibt jede Sekunde, ausser ich starte das Fehlerprotokoll... dann fehlen 2 Sekunden.
Also hab ich kein Parallel-Prozess hinbekommen -.-'' den sonst würde der Timer ja normal weiter schreiben, wärend er das Fehlerprotokoll schreibt.

Hoffe jemand kann helfen.

_________________
Die Welt besteht aus Zahlen, also ist alles möglich.
[Delphi 5] - [Delphi XE5]
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Sa 01.11.14 15:10 
Wenn du in Delphi über den Wizard einen neuen Thread hinzufügst, sollte eigentlich irgendwo ein fetter Kommentar stehen. Der Kommentar besagt, dass du die Methode "Execute" überschreiebn und mit deinem Code füllen sollst.

Wie so etwas grob ausschaut: de.wikibooks.org/wik...phi:_Pascal:_Threads

Nur der Inhalt der Execute-Methode wird asynchron ausgeführt, aber auch nur dann, wenn du sie nicht direkt aufrufst! (Also auf keinen Fall TFÜFehlerprotokoll.Execute() schreiben...)
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Sa 01.11.14 16:39 
So recht sind mir die Treads zwar noch n Rätzel aber wenigstens läufts nun wie es soll :D
Danke

_________________
Die Welt besteht aus Zahlen, also ist alles möglich.
[Delphi 5] - [Delphi XE5]