![]() |
Re: Sinnvoller Einsatz von goto
N.B. Und vielleicht auch noch die 64-Bit-Version vorbereiten:
Delphi-Quellcode:
Mist - zereditiert
{$IF (CompilerVersion<20.00)}
Type NativeInt = type Integer; //Delphi2007: SizeOf(NativeInt)<>4(!) {$IFEND} ... SendMessage(ParentHandle, CM_STATUS, NativeInt(PChar('Durchlauf:')), i); ... |
Re: Sinnvoller Einsatz von goto
Zitat:
Integer bleibt 32 bittig, wenn ich richtig informiert bin .... |
Re: Sinnvoller Einsatz von goto
Das hat dann aber nicht mehr soooo viel mit GOTO zu tun, dem Thema des Threads.
|
Re: Sinnvoller Einsatz von goto
Zitat:
|
Re: Sinnvoller Einsatz von goto
Zitat:
Zitat:
|
Re: Sinnvoller Einsatz von goto
Delphi-Quellcode:
function DemoThread(p: Pointer): Integer;
var i: Integer; ParentHandle: THandle; begin ParentHandle := PThreadParams(p)^.ParentHandle; for i := 0 to 9 do begin if Abort then begin SendMessage(ParentHandle, CM_ABORT, 0 , 0); Break; end; SendMessage(ParentHandle, CM_STATUS, Integer(PChar('Durchlauf:')), i); Sleep(500); if i = 9 then SendMessage(ParentHandle, CM_FINISHED, 0, 0); end; Dispose(p); Result := 0; end;
Delphi-Quellcode:
Wobei bei Sowas das Try-Finally, bezüglich des der Speicherfeigabe, sowieso in irgendeiner Weise zu bevorzugen ist.
function DemoThread(p: Pointer): Integer;
var i: Integer; ParentHandle: THandle; begin ParentHandle := PThreadParams(p)^.ParentHandle; i := 0 while (i <= 9) and not Abort do begin SendMessage(ParentHandle, CM_STATUS, LPARAM(PChar('Durchlauf:')), i); Sleep(500); Inc(i); end; if i > 9 then SendMessage(ParentHandle, CM_FINISHED, 0, 0) else SendMessage(ParentHandle, CM_ABORT, 0 , 0); Dispose(p); Result := 0; end;
Delphi-Quellcode:
Abgesehn davon ist der Quatsch mit dem 32-Bit-Integer in 64 Bt hier egal, denn selbst wenn man hier den Pointer ordnungsgemäß in einen 64-Bit-Intreger (in einem 64-Bit-Compiler) umwandelt, dann muß man eh erstmal abgleichen ob dort SendMessage auch 64-Bit-Parameter hat ... also denke ich mal, daß man dort auch gleich den Typen des Parameters nutzen kann.
function DemoThread(p: Pointer): Integer;
var i: Integer; ParentHandle: THandle; begin try ParentHandle := PThreadParams(p)^.ParentHandle; i := 0 while (i <= 9) and not Abort do begin SendMessage(ParentHandle, CM_STATUS, LPARAM(PChar('Durchlauf:')), i); Sleep(500); Inc(i); end; if i > 9 then SendMessage(ParentHandle, CM_FINISHED, 0, 0) else SendMessage(ParentHandle, CM_ABORT, 0 , 0); finally Dispose(p); end; Result := 0; end; Und ja, ich finde auch, daß es an einigen Stellen einfach einfacher mit GOTO lösbar ist. PS: ein Break, While, For, Case und vieles Anderes besteht intern quasi auch nur ein ein paar IFs+GOTO. :angel: |
Re: Sinnvoller Einsatz von goto
Zitat:
Zitat:
|
Re: Sinnvoller Einsatz von goto
![]() Tut mir ja Leid, aber ohne Goto hätte ich dort so Einiges an doppeltem Code und/oder die eine oder andere Stelle hätte etwas umständlicher gelößt werden müssen. Und nein, bis auf wenige Stellen nutze ich auch sehr selten ein Goto, also ich kann nicht behaupten, daß ich dieses auf Krampf versuche immer zu verwenden ... wie man oben sieht, geht es auch ja auch oftmals anders/ohne. Aber bei Rücksprüngen oder beim Rumspringen in mehreren verschachtelten Schleifen ist es schon hier oder da auch mal recht gut zu gebrauchen. Und wozu soll man etwas Vorhandenes und vorallem Funktionierendes nicht verwenden, wenn es damit "einfacher" geht? Wenn man weiß, was man macht, dann erzeugt ein Goto auch keinen gefährlichen Code. |
Re: Sinnvoller Einsatz von goto
Da reichen vier Buchstaben: Nein
|
Re: Sinnvoller Einsatz von goto
Zitat:
Ich bin auch äußerst verwundert über diesen Thread. Gerade von Luckie hätte ich das nicht erwartet :gruebel: Sinnvoller Einsatz von goto ... ist nicht möglich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 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