AGB  ·  Datenschutz  ·  Impressum  







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

Timer=eigener Thread?

Ein Thema von jmd anders · begonnen am 20. Nov 2006 · letzter Beitrag vom 17. Jun 2007
Antwort Antwort
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#1

Re: Timer=eigener Thread?

  Alt 17. Jun 2007, 02:23
Zitat von Sadum:
Damit ist die Frage nach dem "Threadsafe" aber nicht wirklich beantwortet, denn soweit ich weiß werden Timer doch zumindest "abwechselnd" und nicht nacheinander ausgeführt oder?
Kurz: Was ist wenn ich 2 Timer habe, die zeitgleich 2 Codeabschnitte starten (oder sozusagen "auf 2 Buttons gleichzeigt drücke"), welche z.B. beide ein array von 2000 Elementen überschreiben? Kann es dann sein, dass 1000 Elemente die Werte von Timer1 enthalten und 1000 die Werte von Timer2, oder werden Timer intern nacheinander ausgeführt?
Hallo,

die Probleme sind schon ähnlich wie bei Threads - das gilt allerdings für das gesamte Windows-Meldungs-System. Du kannst ja auch z.B. 2 mal kurz nacheinander den Befehl "Datei laden" geben, dann wird ein 2. Ladevorgang gestartet, obwohl er erste noch nicht beendet ist. Ob das funktioniert oder nicht, hängt vom genauen Ablauf ab: kann sein, die Ladeprozedur blockiert die Message Loop, dann kommt der 2. Befehl erst an, wenn der erste abgearbeitet ist, gibt es dagegen irgendwo ein ProcessMessages, dann platzt er mittenrein. Zur Abhilfe muss man z.B. den Menuepunkt "Laden" deaktivieren, solange eine Ladefunktion läuft, oder in der Funktion Semaphore oder Mutexe verwenden, es gibt viele Möglichkeiten.

Beim Timer kommt noch dazu, dass er nicht mit dem Rest synchronisiert ist, eine Timermessage kann also zu jedem beliebigen Zeitpunkt auftreten, das ist schon so was ähnliches wie ein Pseudothread. Man muss also nach den Regeln der nebenläufigen Programmierung arbeiten, z.B. dürfen Variable, die im Hauptprogramm und in der Timerroutine verwendet werden, nur von einem der beiden Programmteile geschrieben werden, und wenn mehrere solche Variable zusammenhängen, muss man beim Schreiben so etwas wie eine Critical Section einrichten.

Das beantwortet auch deine letzte Frage: wenn ein Timer einen anderen unterbrechen kann, gibts ohne Gegenmassnahmen Datensalat.

Gruss Reinhard
  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 04:46 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