Verlaufsbalken und das Problem "keine Rückmeldung"

Started by cbaCAD, July 14, 2014, 05:05:53 AM

Previous topic - Next topic

cbaCAD

Gibt es eine Möglichkeit, die Steuerung eines Verlaufsbalken so anzupassen, dass nicht die Meldung "keine Rückmeldung" den Dialog übernimmt?

Das Einbauen von (princ "\rString ....")(princ) hat leider nicht die gewünschte Verbesserung gebracht.

Hier meine Unter-Routine zu diesem Thema:

(defun SUB:xIsDoneOf (IstWert EndWert)
  (if (not (dcl_Form_IsActive 2014-07-14-1020-10_D1))
    (progn (dcl_project_load (strcat (set-cbaCAD-Dialog-Path "Tools") "2014-07-14-1020-10"))
      (dcl_form_show 2014-07-14-1020-10_D1)
    )
  )
  (dcl-Control-SetMaxValue 2014-07-14-1020-10/D1/IsDone EndWert)
  (dcl-Control-SetMinValue 2014-07-14-1020-10/D1/IsDone 1)
  (dcl-Control-SetValue 2014-07-14-1020-10/D1/IsDone IstWert)
  (princ (strcat "\rvon " (itoa EndWert) " sind " (itoa IstWert) " bereits bearbeitet."))
  (princ) 
  (if (>= IstWert EndWert)
    (progn (dcl_Form_close 2014-07-14-1020-10_D1) (dcl_project_unload "2014-07-14-1020-10"))
  )
  (princ)
;;; Ende SUB:xIsDoneOf
)
Rainer Bous
Dipl.-Ing. (FH)

Fred Tomke

Hi, ohne den Code getestet zu haben: das wird in AutoCAD nicht funktionieren.
Warum? AutoCAD läuft für Dich in einem einzigen Thread ab: alles schööön nacheinander. Man spricht hier von synchroner Arbeitsweise (im Vergleich zur ereignisgesteuerten asynchronen Arbeitsweise bspw. mit parallelen Threads). Du wünschtest Dir einen parallelen Thread, in dem parallel zur zeichnungsinternen Bearbeitung genügend Ressourcen für den Zugriff auf die Steuerelemente bleiben. Das wünsche ich mir auch seit Jahren. Ein einfaches Beispiel, was in Lisp nicht zu lösen ist, ist das Abbrechen komplexer Vorgänge (Beispiel hier). Ich habe sogar festgestellt, dass AutoCAD Abläufe für sich derart optimiert, dass bestimmte Aktualisierungen in komplexen Operationen unterdrückt werden, um sie erst später auszuführen. Ein Beispiel in meinem Fall waren Satusmeldungen in der Befehlszeile.

Kurz gesagt: Solange man mit Lisp arbeitet und nicht bestimmte Operationen in einem separaten Thread auslagern kann, damit das AutoCAD in Ruhe gelassen wird, wird man immer Gefahr laufen, dass "keine Rückmeldung" erscheint.

Ich weiß, es ist keine Lösung - aber vielleicht eine Erklärung für ein besseres Verständnis.

Im ÃÅ"brigen musste ich feststellen, dass der Programmablauf um Vieles schneller ist, wenn man als MaxValue maximal 100 eingibt und nur noch im Intervall von 5 oder 10 % den Verlaufsbalken aktualisiert.

VG, Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]