AGB  ·  Datenschutz  ·  Impressum  







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

verhindern: Klick auf Titelleiste stoppt Programm

Ein Thema von SevenOfNine · begonnen am 27. Nov 2010 · letzter Beitrag vom 29. Nov 2010
Antwort Antwort
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
535 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: verhindern: Klick auf Titelleiste stoppt Programm

  Alt 27. Nov 2010, 13:56
Ab welcher Delphi Version gibt es die Methode Queue von TThread?
Ich sehe Du hast Delphi 2006.
Gibts die bei Deiner?
(Dann hab ich die auch. Hechel)
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: verhindern: Klick auf Titelleiste stoppt Programm

  Alt 27. Nov 2010, 13:58
Kann ich im Moment nicht nach gucken, da ich ihr auf dem Netbook nur Delphi 7 installiert habe.

Nachtrag: Unter D7 gibt es die Methode noch nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (27. Nov 2010 um 14:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: verhindern: Klick auf Titelleiste stoppt Programm

  Alt 27. Nov 2010, 14:19
Gute Frage ... bei D2010 gibt es die auf jeden Fall

Im Anhang mal ein kleines Test-Projekt wo man den Unterschied zwischen Queue und Synchronize sehen kann.

In der Listbox wird jeweils der Erstellungszeitpunkt im Thread und der Zeitpunkt der Anzeige geschrieben.
Nach jeder Anzeige schläft der HauptThread 500ms (um eine zeitraubende Bearbeitung zu simulieren)
Bei Synchronize sind beide Zeiten gleich, bei Queue sind diese unterschiedlich.

(exe + src included)

(äh, der Source ist nur so hingeklatscht ... also bitte keine Kommentare wegen dem Stil )
Angehängte Grafiken
Dateityp: png WorkThread-Sync.png (22,2 KB, 44x aufgerufen)
Dateityp: png WorkThread-Queue.png (22,6 KB, 39x aufgerufen)
Angehängte Dateien
Dateityp: zip WorkThread.zip (383,6 KB, 23x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
535 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: verhindern: Klick auf Titelleiste stoppt Programm

  Alt 27. Nov 2010, 14:22
Puhh..
Was hab ich mir eigene ThreadPools gebaut genau für diesen Zweck.
Ich hoffe doch sehr dass mich am Montag diese Methode aus D2007 anspringt!

Danke. Man lernt immer wieder dazu.
(bzw. endeckt Features von denen man nur zu träumen wagte)
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: verhindern: Klick auf Titelleiste stoppt Programm

  Alt 27. Nov 2010, 14:26
Moment, ThreadPools sind was anderes. ThreadPolls verwalten mehrere WorkerThreads. Wie unser Adel schon geschrieben hat ist die Methode Queue die non-blocking Version von Synchronize.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: verhindern: Klick auf Titelleiste stoppt Programm

  Alt 27. Nov 2010, 17:43
@Sir Rufo

es gibt da eine Stelle in Deinem Code, mit dem ich nicht klar komme:

Delphi-Quellcode:
constructor TWorkThread.Create( CreateSuspended : Boolean );
  begin
    FCS := TCriticalSection.Create;

ich war bisher davon ausgegangen dass diese Section ein eindeutiger, einmaliger Abschnitt sein muss.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: verhindern: Klick auf Titelleiste stoppt Programm

  Alt 27. Nov 2010, 21:55
@Sir Rufo

es gibt da eine Stelle in Deinem Code, mit dem ich nicht klar komme:

Delphi-Quellcode:
constructor TWorkThread.Create( CreateSuspended : Boolean );
  begin
    FCS := TCriticalSection.Create;

ich war bisher davon ausgegangen dass diese Section ein eindeutiger, einmaliger Abschnitt sein muss.
Jo, aber die ist doch eindeutig für das Objekt? oder ich verstehe deine Frage nicht
Und ich verstehe auch nicht warum es einmalig sein muss?

Ich kann so viele TCriticalSection-Instanzen wie ich möchte/benötige.
Manchmal kann es Sinn machen mehrere Instanzen zu benutzen.

Es geht ja nur darum (in einer MultiThread-Umgebung) einerseits die Zugriffe auf den Speicher zu regeln (gleichzeitiges Lesen und Schreiben erzeugt halt Zugriffsfehler) und andererseits (vergleichbar mit den Transaktionen im DB-Umfeld) konsistente Daten zu erhalten (bei geschickter Verwendung).

Kleines Beispiel zu den konsistenten Daten:
Delphi-Quellcode:
function TMyThread.GetPoint : TPoint;
begin
  FCS.Enter;
  try
    Result := FPoint;
  finally
    FCS.Leave;
  end;
end;

procedure TMyThread.Execute;
begin
  while not Terminated do
    begin

      // Diese Daten sind immer konsistent bei der Abfrage

      FCS.Enter;
      try
        FPoint.X := 1;
        FPoint.Y := 1;
      finally
        FCS.Leave;
      end;

      // Hier ist die Konsistenz nicht gewährleistet - also schlechter Code :o)

      FCS.Enter;
      try
        FPoint.X := 2;
      finally
        FCS.Leave;
      end;

      // Erfolgt jetzt ein Zugriff von aussen, dann hat FPoint ja den Wert (2,1)

      FCS.Enter;
      try
        FPoint.Y := 2;
      finally
        FCS.Leave;
      end;

    end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 06:10 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