Der Singleton -Modus wird verwendet, um in diesem Beispiel nur ein Objekt einer bestimmten Klasse zu beschränken. ) Wenn die Ankünfte einen Thread erzeugen, aber eine andere Uhr erfolgt Lösungen.
Der Kerncode lautet wie folgt:
// Timereinheit
Procedure tService1.timer_maintimer (Absender: tobject);
var
MyStringList: TStringList;
SearchRec: Tsearchrec;
Jetzt Time: String;
Beginnen
versuchen
DateTimetoString (Now Time, 'HH: nn', jetzt);
Wenn LinkSstr (jetzt Time, 4) = LinkSstr (getmsg ('game', 'issuance time', theexename+'. ini'), 4) dann
Beginnen
// Erstellen Sie einen Sende -Thread
Global_instance: = tsendthread.getInstance;
///////////////////////////////////////.
Ende;
außer
auf e: Ausnahme tun
Beginnen
MyStringList: = tstringList.create;
Wenn File (extractFilepath (paramstr (0))+'err.txt') dann
MyStringList.loadFromFile (extractFilepath (paramstr (0))+'err.txt');
myStringList.add ('('+datetimetoStr (jetzt)+') [Fehler erstellen Thread:]'+e.message);
MyStringList.SaveTofile (extractFilepath (paramstr (0))+'err.txt');
MyStringList.Free;
Wenn findfirst (extractFilepath (paramstr (0))+'err.txt', faanyfile, searchrec) = 0 dann
Beginnen
Wenn suchrec.size> 5000000 dann
Beginnen
RenameFile (ExtractFilePath (Paramstr (0))+'err.txt', Ansireplacestre (extractFilepath (paramstr (0))+'err.txt', txt ', formatDatetime (' yyyy-mm-dd hh-mm-ss ', jetzt)+'. txt '));
Ende;
Ende;
Ende;
Ende;
Ende;
// Gewindeeinheit
UNIT UNIT_SEND;
Schnittstelle
Verwendung
Systeme, Klassen, Strutile, Haupt;
Typ
Tsendthread = class (tthread)
öffentlich
Konstruktor erstellen (erstellt: boolean);
Zerstörer zerstören;
Klassenfunktion GetInstance: TsendThread;
Verfahrenswitz;
geschützt
Verfahren ausführen;
Ende;
var
Global_instance: tsendthread;
Durchführung
verwendet db;
Klassenfunktion TsendThread.getInstance: TsendThread;
Beginnen
Wenn global_instance = nil dann
Beginnen
Global_instance: = tsendthread.create (false);
Ende;
Ergebnis: = global_instance;
Ende;
Konstruktor Tsendthread.create (erstellt: boolean);
Beginnen
Wenn global_instance = nil dann
Beginnen
erbte Erstellung (erstellt);
FreeOnterminate: = true;
Ende
anders
Exception erhöhen.
Ende;
Destruktor Tsendthread.Destroy;
Beginnen
erbte Zerstörung;
Ende;
Verfahren tsendthread.joke;
Beginnen
Ende;
Verfahren tsendthread.execute;
var
TheUser: Tuserinfo;
TMPSQL: String;
Beginnen
// Aufgaben ausführen
// RECHTE AUSGABE REABENUNG '+GAMEINFO.MAINUSERTABLE+' '
tmpsql: = 'select * from'+mainusertable+'wobei Destroy = 0 Order by id';
Service1.adoquery_send.Connection: = conn_server;
SQLQuery (service1.adoquery_send, tmpsql);
während (nicht service1.adoquery_send.eof) und (nicht beendet) tun
Beginnen
theUser.seqid: = '0';
thuser.uid: = '';
theUser.spc: = getmsg ('parameter', 'spCode', Theexename+'. Ini');
TheUser.Recordid: = '0';
TheUser.MOB: = service1.adoquery_send.fieldbyname ('mobil'). Asstring;
Autojoke (TheUser);
Service1.adoquery_send.next;
Ende;
Schlaf (600001);
Global_instance: = nil;
Beenden;
// Die Aufgabe ist abgeschlossen
Ende;
Ende.