lambruco - Do 07.08.03 10:58
Titel: TThread und Dateizugriff [gelöst]
Moin Forum,
ich bin mehr oder wenig verzweifelt. Ich habe ein MDI-Anwendung programmiert, die ähnlich wie die Tail-Funktion in Unix Logfiles
überwacht. Das Programm läuft eigentlich auch, leider kann ich aber nur eine Datei überwachen. Jedesmal, wenn ich eine zweite oder weitere
Logfile überwachen will, bleiben die vorangegangenen Fenster stehen.
Da ich von Thread-Programmierung keine Ahnung habe, liegt der Fehler
wohl hier:
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:
| unit TrigoTail2;
interface
uses classes,sysutils,windows,forms,StrUtils,StdCtrls;
type TTrigoTail2 = class(TThread) private . . . procedure ChangeNotificator(); public m_bCancel : boolean; constructor create(fileDir,fileName : string; lines : TMemo; maxLines : integer = 1000);
end;
implementation
uses TailForm;
constructor TTrigoTail2.create(filedir, fileName : string; lines : TMemo; maxLines: integer); begin m_lines := lines; m_maxLines := maxLines; m_fileDir := fileDir; m_fileName := fileName; m_cnt := true; m_HelpStr := ''; m_bCancel:=True; inherited create(false); ChangeNotificator(); end; |
AndyB - Do 07.08.03 12:14
Der Compiler sagt dir sicher, dass du eine
Abstrakte Klasse instanzierst. Der Code, der im neuen Thread ausgeführt werden soll, muss in Execute stehen bzw. von Execute aufgerufen werden.
| Zitat: |
inherited create(false);
ChangeNotificator(); |
Hiermit startest du den Thread [create(false)], der gleich eine EAbstract Exception auslöst, da du Execute nicht überschrieben hast.
In der darauf folgenden Zeile, die immernoch im aufrufenden Thread ausgeführt wird, machst du dann deine Aktionen.
Entweder du benennst ChangeNotificator in Execute um, verschiebst die deklaration nach
protected und hängst dieser ein
override an, oder du fügst eine neue Execute Methode hinzu, die dann ChangeNotificator aufruft.
Aber so wie du es im Moment hast, kann das nicht funktionieren.