Announcement

Collapse
No announcement yet.

Datenbankaktionen in Thread auslagern

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

  • Datenbankaktionen in Thread auslagern

    Da ich mich mit Threads NOCH nicht sonderlich gut auskenne, möchte<BR>
    ich eine Frage loswerden: <BR>
    Die Datenbankoperationen sind ausgelagert in eine Datenbankkomponente.<BR>
    Bei längeren Datenbankoperationen ist die Software im Moment noch <BR>
    "stillgelegt". Es wird ein Meldungsformular über den zu füllenden<BR>
    treeView gelegt und wieder ausgeblendet bei Beendigung der Operation.<BR>
    Jetzt ist mein Problem, dass auf das eingeblendete Formular <BR>
    Schaltflächen instantiiert werden zur Laufzeit, wie z.B. Abbrechen o.ä.<BR>
    Wären diese Schaltflächen wieder zu bedienen, wenn die Datenbankabfrage<BR>
    einem eigenen Thread laufen?<BR>
    <BR>
    Außerdem habe ich noch eine Frage bezüglich application.processMessages:<BR>
    Sollte man bei Operationen, die in keiner Weise mit Formularen zu tun<BR>
    haben, die unit forms einbinden, um auf die application zugreifen<BR>
    zu können? Oder welche Alternative gibt es?<BR><BR><BR>
    Danke im Voraus, Heiko Ziegler

  • #2
    Hallo,

    &gt;Wären diese Schaltflächen wieder zu bedienen, wenn die <br>
    &gt;Datenbankabfrage einem eigenen Thread laufen?

    Ja.

    &gt;Oder welche Alternative gibt es?

    Die Windows-Knigge schreibt nur vor, dass ein Thread, der ein Hauptfenster erzeugt hat, regelmässig die Botschaftswarteschlage (Message Loop) auslesen muss. Die Borland-Implementierung ProcessMessages ist nur ein Weg dafür, allerdings kann man das im eigenen Thread erledigen, wie das folgende Beispiel zeigt (dieser Thread wird vom primären Thread aus durch den Aufruf von <b>PostThreadMessage</b> "zum Leben erweckt"):
    <pre>
    ..
    while GetMessage(aMsg, 0, 0, 0) do
    begin
    TranslateMessage(aMsg);
    DispatchMessage(aMsg);
    ...
    if Terminated then
    Break;
    end;
    ..
    </pre>
    Der Punkt bei dem Ganzen liegt jedoch darin, dass jeder Thread (entweder der primären Thread der VCL oder ein eigener abgespalteter Thread) nur die Botschaftswarteschlange der Fenster auslesen kann, die er selbst erzeugt hat.

    P.S: Mein Buch <i>Win32 - Lösungen</i> (siehe http://www.entwickler.com/itr/buecher/psecom,id,25,nodeid,92,ps_lo,40.html ) geht sehr ausführlich auf Threads und das Hantieren damit ein

    Comment


    • #3
      Danke für die Info.<BR>
      <BR>
      Gruß, Heiko Ziegle

      Comment

      Working...
      X