HT, PB und Threads - kein gutes Trio ?
Verfasst: 16.11.2004 00:29
In einer etwas umfangreicheren Anwendung soll im Hintergrund gelesen und die Datei-Inhalte ausgewertet werden, während man die bereits vorliegenden Ergebnisse vom Dateianfang schon bewundern kann.
Das Lesen und Auswerten ist in einen Thread gepackt, der nur wenige globale Variablen nach außen gibt und die Daten in Arrays füllt.
Die Darstellung außen liest aus den "vorn" liegenden Bereichen der Arrays aus, während der Thread "hinten" weiter füllt.
Klappt alles auch schön sauber. Wenn die Anwendung aber auf einer HT-Maschine laufen soll, dann bleibt der Thread regelmäßig hängen. Die CPU-Last klemmt bei 50% die Task liefert keine Rückmeldung mehr. In manchen Fällen läuft der "außen" eingebaute Timer weiter, beim nächsten Versuch unter scheinbar gleichen Bedingungen nicht. Die Zeitpunkte der Hänger sind ebenfalls mehr oder minder zufällig, aber nach 1 - 5 Sekunden ist meist Schluss.
Offenbar vergibt WinXP das Hauptprogramm als ersten Thread an die eine und den gestarteten Hintergrund-Thread an die andere "CPU" und dies führt zu den geschilderten Problemen.
Warum läuft die Sache nicht ?
Was muss man dabei besonders beachten ?
Gibt es Erfahrungen mit solchen Konstruktionen ?
Gibt es Statements der Entwickler dazu ?
Das Lesen und Auswerten ist in einen Thread gepackt, der nur wenige globale Variablen nach außen gibt und die Daten in Arrays füllt.
Die Darstellung außen liest aus den "vorn" liegenden Bereichen der Arrays aus, während der Thread "hinten" weiter füllt.
Klappt alles auch schön sauber. Wenn die Anwendung aber auf einer HT-Maschine laufen soll, dann bleibt der Thread regelmäßig hängen. Die CPU-Last klemmt bei 50% die Task liefert keine Rückmeldung mehr. In manchen Fällen läuft der "außen" eingebaute Timer weiter, beim nächsten Versuch unter scheinbar gleichen Bedingungen nicht. Die Zeitpunkte der Hänger sind ebenfalls mehr oder minder zufällig, aber nach 1 - 5 Sekunden ist meist Schluss.
Offenbar vergibt WinXP das Hauptprogramm als ersten Thread an die eine und den gestarteten Hintergrund-Thread an die andere "CPU" und dies führt zu den geschilderten Problemen.
Warum läuft die Sache nicht ?
Was muss man dabei besonders beachten ?
Gibt es Erfahrungen mit solchen Konstruktionen ?
Gibt es Statements der Entwickler dazu ?