AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ist ServiceExecute im Hauptthread

Ein Thema von QuickAndDirty · begonnen am 8. Dez 2010 · letzter Beitrag vom 14. Dez 2010
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#1

Ist ServiceExecute im Hauptthread

  Alt 8. Dez 2010, 10:49
Delphi-Version: 5
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;
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 8. Dez 2010 um 12:44 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#2

AW: Ist ServiceExecute im Hauptthread

  Alt 9. Dez 2010, 14:08
Shameless selfbump
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ist ServiceExecute im Hauptthread

  Alt 13. Dez 2010, 15:34
Entschuldigung, .....
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Ist ServiceExecute im Hauptthread

  Alt 13. Dez 2010, 15:36
Ich weiß nicht, ob das was bringt, aber du kannst ja an passender Stelle mal folgenden Vergleich machen: MainThreadID = GetCurrentThreadId()
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ist ServiceExecute im Hauptthread

  Alt 14. Dez 2010, 09:42
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???
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ist ServiceExecute im Hauptthread

  Alt 14. Dez 2010, 10:03
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?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Ist ServiceExecute im Hauptthread

  Alt 14. Dez 2010, 10:04
GetCurrentThreadId ist eine Windows-API-Funktion, die es seit 15 Jahren gibt. Die Delphiversion hat damit nicht viel zu tun. Siehe Unit Windows.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ist ServiceExecute im Hauptthread

  Alt 14. Dez 2010, 10:33
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....
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz