Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Sinnvoller Einsatz von goto (https://www.delphipraxis.net/149370-sinnvoller-einsatz-von-goto.html)

samso 20. Mär 2010 07:24

Re: Sinnvoller Einsatz von goto
 
N.B. Und vielleicht auch noch die 64-Bit-Version vorbereiten:

Delphi-Quellcode:
{$IF (CompilerVersion<20.00)}
Type
  NativeInt = type Integer;    //Delphi2007: SizeOf(NativeInt)<>4(!)
{$IFEND}
...
SendMessage(ParentHandle, CM_STATUS, NativeInt(PChar('Durchlauf:')), i);
...
Mist - zereditiert

jfheins 20. Mär 2010 07:29

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von samso
N.B. Und vielleicht auch noch die 64-Bit-Version vorbereiten:

:?: :?: :?:
Integer bleibt 32 bittig, wenn ich richtig informiert bin ....

alzaimar 20. Mär 2010 07:31

Re: Sinnvoller Einsatz von goto
 
Das hat dann aber nicht mehr soooo viel mit GOTO zu tun, dem Thema des Threads.

samso 20. Mär 2010 07:45

Re: Sinnvoller Einsatz von goto
 
Zitat:

Integer bleibt 32 bittig, wenn ich richtig informiert bin ....
Darum ja, denn PChar wird 64-Bit.

alzaimar 20. Mär 2010 08:34

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von samso
Zitat:

Integer bleibt 32 bittig, wenn ich richtig informiert bin ....
Darum ja, denn PChar wird 64-Bit.

Zitat:

Zitat von alzaimar
Das hat dann aber nicht mehr soooo viel mit GOTO zu tun, dem Thema des Threads.

*Tap* *Tap* *Tap*

himitsu 21. Mär 2010 22:45

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:
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;
Wobei bei Sowas das Try-Finally, bezüglich des der Speicherfeigabe, sowieso in irgendeiner Weise zu bevorzugen ist.
Delphi-Quellcode:
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;
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.

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:

omata 21. Mär 2010 23:03

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von himitsu
Und ja, ich finde auch, daß es an einigen Stellen einfach einfacher mit GOTO lösbar ist.

nicht wirklich, aber wenn du meinst.

Zitat:

Zitat von himitsu
PS: ein Break, While, For, Case und vieles Anderes besteht intern quasi auch nur ein ein paar IFs+GOTO. :angel:

Ja ne, is klar. Wo war nochmal der Unterschied zwischen Hochsprache und Assembler? Ach ja, in einer Hochsprache kann man strukturiert programmieren. GOTO gehört nicht zu den strukturierten Befehlen (Disskussion wie immer, daran ändert sich auch niemals etwas). Nur weil ein Befehl aus historischen Gründen noch existiert, muss man nicht unbedingt auf krampf ein Beispiel konstruieren, damit man auch diesen endlich mal benutzen kann. Das ist einfach unglaublich wie dieses Thema immer wieder hochkocht. Einfach faszinierend und echt traurig.

himitsu 21. Mär 2010 23:16

Re: Sinnvoller Einsatz von goto
 
http://www.delphipraxis.net/internal...062424#1062424
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.

omata 21. Mär 2010 23:20

Re: Sinnvoller Einsatz von goto
 
Da reichen vier Buchstaben: Nein

Meflin 22. Mär 2010 01:24

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von omata
Da reichen vier Buchstaben: Nein

:thumb:

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.
Seite 2 von 5     12 34     Letzte »    

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