![]() |
Delphi-Version: 5
Ist ServiceExecute im Hauptthread
Edit: Delphi Version ist nicht 5 sondern 7 und 2007
Hallo , mal ne kleine Frage am Rande... Die Methode ServiceExecute bei einem Dienst läuft die im Hauptthread? Der Dienst reagiert auf Netzwerkanfragen und führt dann in den TCP/IP-Server-Unterthreads Komponenten aus...und die sind zum Teil nicht threadsicher, deswegen werden sie mit der der Methode
Code:
ausgeführt. Nur bekomme ich ab und zu (und nur bei einem von vielen hundert Kunden) die Exception ins Lock
TThread.Synchronize(Thread,TCmdData(cmdlist.Objects[cmdlist.IndexOf(cmd)]).ProcPointer);
"CheckSynchronize wurde vom Thread $1084 aufgerufen, der NICHT der Haupt-Thread ist..." ...und das wars dann mit dem Dienst. So rufe ich checksyncronize auf
Code:
procedure TService1.ServiceExecute(Sender: TService);
begin while not Terminated do begin ServiceThread.ProcessRequests(True); Classes.CheckSynchronize; end; end; |
AW: Ist ServiceExecute im Hauptthread
Shameless selfbump
|
AW: Ist ServiceExecute im Hauptthread
Entschuldigung, .....
|
AW: Ist ServiceExecute im Hauptthread
Ich weiß nicht, ob das was bringt, aber du kannst ja an passender Stelle mal folgenden Vergleich machen:
Delphi-Quellcode:
MainThreadID = GetCurrentThreadId()
|
AW: Ist ServiceExecute im Hauptthread
Super vielen mucho grande Danke schön für deinen Post.
Ich versuch es mal. MainThreadID erhalte ich aus der Unit System, sehe ich gerade... GetCurrentThreadID scheint es nicht zu geben...hier in Delphi7 Hast du noch eine Idee??? |
AW: Ist ServiceExecute im Hauptthread
Oh je gerade heraus gefunden....
Alles was in TService.Execute passiert passiert in einem Servicethread...nicht im hauptthread... kann man "nicht-thread-sichere" Funktionen in einem thread per Criticalsection "sicher" aufrufen? |
AW: Ist ServiceExecute im Hauptthread
GetCurrentThreadId ist eine Windows-API-Funktion, die es seit 15 Jahren gibt. Die Delphiversion hat damit nicht viel zu tun. Siehe Unit Windows.
|
AW: Ist ServiceExecute im Hauptthread
Zitat:
Aber es ist leider halt so das Execute in einer Schleife in einem Servicethread liegt...also muss ich wohl mit criticalsection arbeiten.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz