Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
15. Mai 2006
Na ja, zuminstestens gibt's jetzt ja erstmal die Auflösung deines Problems und "massig" (noch nicht alle) Vorschläge für eine praktische Lösung :roll:
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
15. Mai 2006
Syncronize hatte ich früher oft verwendet und keine Probleme gehabt, wenn dazwischen halt nur genug Zeit blieb (außerdem muß man den Status ja nich Millisekündlich dem User mitteilen ... sooo schnell gugt der eh nicht :roll: )
Das mit dem Timer ist eigentlich mit am Besten, um einem User den Status mitzuteilen (denk ich) ... die Anzeige kommt schon regelmäßig, egal wie schnell der PC die...
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
15. Mai 2006
Eine andere "einfach" Lösung ist halt, statt dem Sleep (von oben) einfach etwas mehr Code einzufügen ... denn wenn zwischen den einzelnen aufrufen von SYNCHRONIZE genug Zeit vergeht, dann würde es ja dennoch "laufen"
procedure tmythread.Execute;
begin
tcount:=1;
repeat
synchronize(display);
... // viel Rechenzeit
until tcount>1000;
end;
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
15. Mai 2006
Das stimmt ja schon, aber das Synchronize muß ja irgendwie dafür sorgen, daß der Hauptthread nichts macht, wärenmd es arbeitet (wegen der Zugriffsprobleme).
Man könnte ja auch nu das INC selber locken und vom Haupthread (in 'ner Schleife auslesen)
procedure tmythread.Execute;
begin
tcount:=1;
repeat
InterlockedInc(tcount); // ich glaub so hies das
until tcount>1000;
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
15. Mai 2006
Bei synchronize; wird ja der Hauptthread solange angehalten, bis die damit aufgerufene Funktion beendet ist ... ich vermute einfach mal, daß nun die "vielen" Threads einfach zuschnell den Hauptthread sperren, so das dieser keine Chance bekommt irgendwas abzuarbeiten.
Versuch mal Forlgendes:
procedure tmythread.Execute;
begin
tcount:=1;
repeat
synchronize(display);
sleep(100); ...