Announcement

Collapse
No announcement yet.

zu was ist ein thread gut und wie programmiere ich einen thread?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • zu was ist ein thread gut und wie programmiere ich einen thread?

    guten tag,

    was ist ein thread, zu was ist er gut und wie programmiert man einen
    thread???

    ciao

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    ein Thread ist ein <i>Programmausführungspfad</i>, der unabhängig vom primären Thread der Anwendung vom Windows-Scheduler regelmäßig Rechenzeit zugeteilt bekommt. Angenommen, in einer Anwendung rufst Du eine Funktion auf, die ca. 60 Sekunden benötigt. Ohne zweiten Thread ist in dieser Zeit die Anwendung <b>eingefroren</b>, d.h. die Anwendung kann nicht mehr auf Benutzereingaben oder Windows-Botschaften reagieren. Wenn zum Beispiel das Programm <i>Microsoft Word</i> keinen zweiten Thread für das Drucken verwenden würde, könnte der Anwender nach dem Druckbeginn für ein sehr umfangreiches Dokument minutenlang nicht mehr mit Word arbeiten. Allerdings geht Word sehr reichlich mit Threads um.

    Delphi vereinfacht mit der Klasse <b>TThread</b> den Einsatz und stellt auch einen Wizard bereit, der das Grundgerüst generiert. Suche am besten im Demos-Unterverzeichnis nach dem Wort "TThread" - dort sollten Beispiele zu finden sein (ob die allerdings bereits schon bei Delphi 2 dabei waren, kann ich aber nicht versprechen).

    In meinem Buch <i>Delphi 3 Lösungen</i> hat sich ein umfangreicher Teil mit dem Einsatz von Threads beschäfigt

    Comment


    • #3
      Hallo,

      klingt wirklich brauchbar, der Thread. Kann mir hier jemand die Bedeutung der Funktion BeginThread und der Übergabeargumente erklaeren ?
      Leider haelt sich die Online-hilfe hier sehr bedeckt :-/

      MfG

      Frank Ambie

      Comment


      • #4
        Hallo,

        mit Delphi besteht kein Grund, die Funktion <b>BeginThread</b> aus der Unit System direkt aufzurufen, da dies <b>TThread</b> automatisch erledigt. Und in dieser VCL-Unit ist auch das Delphi-Beispiel für den Aufruf von BeginThread zu finden:
        <pre>
        constructor TThread.Create(CreateSuspended: Boolean);
        var
        Flags: DWORD;
        begin
        inherited Create;
        AddThread;
        FSuspended := CreateSuspended;
        Flags := 0;
        if CreateSuspended then Flags := CREATE_SUSPENDED;
        FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), Flags, FThreadID);
        end;
        </pre>
        BeginThread ruft die API-Funktion <b>CreateThread</b> auf - und die wird in der SDK-Hilfe dokumentiert:
        <pre>
        function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord;
        ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord;
        var ThreadId: LongWord): Integer;
        var
        P: PThreadRec;
        begin
        New(P);
        P.Func := ThreadFunc;
        P.Parameter := Parameter;
        IsMultiThread := TRUE;
        Result := CreateThread(SecurityAttributes, StackSize, @ThreadWrapper, P,
        CreationFlags, ThreadID);
        end;
        </pre&gt

        Comment


        • #5
          Hallo NG,

          was laesst sich mit den Flags der Funktion BeginThread anstellen,
          in der SDK-Hilfe steht (bei mir) nur :

          dwCreationFlags

          Specifies additional flags that control the creation of the thread. If the CREATE_SUSPENDED flag is specified, the thread is created in a suspended state, and will not run until the ResumeThread function is called. If this value is zero, the thread runs immediately after creation. At this time, no other values are supported.

          Und wozu ist der Pointer(self) da ?

          MfG

          Fran

          Comment


          • #6
            Hallo,

            der Parameter <b>dwCreationFlags</b> legt fest, ob der Thread sofort anlaufen soll. Und <b>Pointer(self)</b> ist ein frei wählbarer Parameter, der an die Threadfunktion weitergegeben wird. Die VCL übergibt den Selfzeiger als 32-Bit-Adresse (falls jemand später diesen benötigt)

            Comment

            Working...
            X