Autor Beitrag
abi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121

Windows 2000
Delphi 5
BeitragVerfasst: Di 25.05.04 11:18 
Hallo alle zusammen

ich habe hier im Forum mal eine Warte schleife gefunden. Sie funktioniert macht überhaupt keine Probleme aber ich bekomme immer eine Warnmeldung jetzt weiss ich nicht ob des irgendwann mal Probleme gibt oder egal ist. :nixweiss:


Die Warnung :hair:
Vorzeichenbehaftete und lose Typen werden Kombiniert -beide Operanden werden erweitert.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Wait(time: word; bstop1: Boolean);
var
  start: integer;
begin
  start := GetTickCount;
  while GetTickcount-start <= time do begin
    Application.ProcessMessages;
    if bstop = True then begin
    //ShowMessage('wait bstop true');
    exit;
    end;
  end;
end;


Ciao

Abi

Moderiert von user profile iconPeter Lustig (11:51, 25.05.2004): Code- durch Delphi-Tags ersetzt

_________________
Die lansamste Schnecke kommt auch irgendwann an.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.05.04 11:24 
ausblenden Delphi-Quelltext
1:
while GetTickcount-start <= time					

GetTickCount ist ein DWORD, da du start ein Integer davon abziehst, erweitert der Compiler den Datentyp zu einem Integer. So weit so gut. Jetzt vergleichst du das aber mit einem Word und das ist vorzeichenlos. Deswegen die Meldung. Deklarier alles als vorzeichenlos und es sollte klappen.


Zuletzt bearbeitet von Luckie am Di 25.05.04 11:47, insgesamt 1-mal bearbeitet
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 25.05.04 11:35 
GetTickcount liefert ein DWord zurück, also ein LongWord (32Bit ohne Vorzeichen), nicht ein Longinteger (was dasselbe wie Integer wäre).

Cu,
Udontknow
abi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121

Windows 2000
Delphi 5
BeitragVerfasst: Di 25.05.04 11:37 
Hallo Lucki
erst mal danke, jetzt bin ich mir nur nicht sicher ob ich dich richtig verstanden habe. :roll:

Ich habe jetzt start zu einer Word Variablen gemacht.
Dann ist zwar die Warnung weg aber dafür geht die schleife nicht mehr. :autsch:

Und GetTickCount hab ich nirgends zugeordnet. :crying:

Tja was soll ich dazu sagen. :nixweiss:

MMMM, kannst du mir nochmal helfen. :D

abi

_________________
Die lansamste Schnecke kommt auch irgendwann an.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 25.05.04 11:38 
Es kommt sehr wahrscheinlich zu einem Überlauf. Mach Start zu einem DWord bzw. zu einem Longword.

Cu,
Udontknow
abi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121

Windows 2000
Delphi 5
BeitragVerfasst: Di 25.05.04 11:39 
wenn GetTickCound ein Integer liefert, dann würde des ja erklären warum des net mehr. Geht

Muss ich mein time in ein Integer Variable ändern.

_________________
Die lansamste Schnecke kommt auch irgendwann an.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 25.05.04 11:41 
Wie ich bereits sagte, liefert GetTickCount Longword (Wertebereich 0..4294967295) zurück, und nicht ein Integer (-2147483648..2147483647).

Cu,
Udontknow
abi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121

Windows 2000
Delphi 5
BeitragVerfasst: Di 25.05.04 11:42 
ok, es geht. :dance: :dance2: :dance:

Vielen dank nochmal. Hab jetzt start zu einem DWord gemacht.

mercy :beer:

_________________
Die lansamste Schnecke kommt auch irgendwann an.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.05.04 11:46 
Udontknow hat folgendes geschrieben:
GetTickcount liefert ein DWord zurück, also ein LongWord (32Bit ohne Vorzeichen), nicht ein Longinteger (was dasselbe wie Integer wäre).

Cu,
Udontknow

Danke, habe mich vertan. Ich bessere es aus.