Einzelnen Beitrag anzeigen

Benutzerbild von Gloegg_FHBI
Gloegg_FHBI

Registriert seit: 28. Nov 2006
Ort: Neuss
46 Beiträge
 
Delphi 10 Seattle Professional
 
#1

[Fun Code] Sleepsort

  Alt 12. Nov 2012, 12:20
Ich bin letztens über einen "interessanten" Sortieralgorithmus gestolpert (http://dis.4chan.org/read/prog/1295544154). Diesen habe ich mal spasseshalber in Delphi implementiert.

Bitte nicht in Produktionscode benutzen!

Delphi-Quellcode:
program Sleepsort;

var
  items: TArray<integer>;
  i: integer;

begin
  randomize;
  writeln('Random: ');
  setlength(items, 25);
  for i := 0 to High(items) do
  begin
    items[i] := random(length(items) * 4);
    write(IntToStr(items[i]) + ' ');
  end;
  writeln;
  writeln('Sorted: ');
  for i := 0 to high(items) do
  begin
     TSortThread.Create(items[i]);
  end;
  readln;
end.
Delphi-Quellcode:
unit uSortThread;

interface

uses
  Classes;

type
  TSortThread = class (TThread)
  private
    fValue : integer;
  protected
    procedure Execute; override;
  public
    constructor Create(n : integer);
  end;

implementation

uses SysUtils;

constructor TSortThread.Create(n: integer);
begin
  inherited Create;
  fValue := n;
end;

procedure TSortThread.Execute;
begin
  sleep(fValue * 333);
  write(IntToStr(fValue)+' ');
end;

end.
Erst hatte ich versuch das mit anonymen Threads zu machen, aber das wollte nicht so recht klappen:
Delphi-Quellcode:
    TThread.CreateAnonymousThread(
      procedure
      begin
        sleep(items[i] * 333);
        write(IntToStr(items[i]) + ' ');
      end).Start;
Die anonyme Methode wird erst ausgeführt, nachdem die for-schleife verlassen wurde. i ist dann 25 und items[i] zeigt auf den Speicherbereich hinter dem array.
  Mit Zitat antworten Zitat