Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ist ServiceExecute im Hauptthread (https://www.delphipraxis.net/156598-ist-serviceexecute-im-hauptthread.html)

QuickAndDirty 8. Dez 2010 09:49

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:
TThread.Synchronize(Thread,TCmdData(cmdlist.Objects[cmdlist.IndexOf(cmd)]).ProcPointer);
ausgeführt. Nur bekomme ich ab und zu (und nur bei einem von vielen hundert Kunden) die Exception ins Lock
"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;

QuickAndDirty 9. Dez 2010 13:08

AW: Ist ServiceExecute im Hauptthread
 
Shameless selfbump

QuickAndDirty 13. Dez 2010 14:34

AW: Ist ServiceExecute im Hauptthread
 
Entschuldigung, .....

s.h.a.r.k 13. Dez 2010 14:36

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()

QuickAndDirty 14. Dez 2010 08:42

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???

QuickAndDirty 14. Dez 2010 09:03

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?

Deep-Sea 14. Dez 2010 09:04

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.

QuickAndDirty 14. Dez 2010 09:33

AW: Ist ServiceExecute im Hauptthread
 
Zitat:

Zitat von Deep-Sea (Beitrag 1068367)
GetCurrentThreadId ist eine Windows-API-Funktion, die es seit 15 Jahren gibt. Die Delphiversion hat damit nicht viel zu tun. Siehe Unit Windows.

Ok, habe mich bisher immer von der VCL und classes etc...bedienen lassen und kaum Ambitionen Richtung Windows API gehabt ^^ . My bad!

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