13.06.2012, 22:46
|
rolfk
LVF-Guru
Beiträge: 2.305
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
RE: Infofenster bei Applikationsstart
(13.06.2012 14:15 )GT123 schrieb: Hallo anbei besten Dank Euch beiden,
eigentlich denke ich das ich die Thematik verstehe, aber im splashscreen hängt die Fortschrittsleiste beim main.vi laden immer noch.
Anbei meine BD. Was ist denn da nicht i.O.???
Es ist äusserst unschön dass Du in Deinem Main VI eine Referenz zum Splashscreen Vi öffnest um dieses zu aborten. Der Umstand dass Du das Main VI Frontpanel öffnest signalisiert dem Splashscreen VI ja bereits, dass Du jetzt soweit bist um die eigentliche Arbeit selber weiterzuführen und damit kann sich das Splashscreen VI ganz einfach selber beenden. Und nein dazu braucht es kein Abort, einfach alles aufräumen was noch aufzuräumen ist und dann das eigene Frontpanel schliessen et voila!
Wie macmarvin ja schon erläuterte führt das Open VI Reference VI alle Arbeit im UI Thread aus. Das ist derselbe Thread der auch für das UI Update benützt wird. Solange eine Open VI Reference also beschäftigt ist, macht LabVIEW keine UI Updates. Das ist manchmal lästig aber eben einfach nicht anders. Alternativen um Open VI Reference nicht im UI Thread auszuführen wurden oft gefordert und die LabVIEW Entwickler haben sicher schon öfters nach Möglichkeiten dazu gesucht, aber das Laden einer VI Hierarchie ist eine delikate Angelegenheit die nicht einfach durch andere Operationen beliebig unterbrochen werden darf da LabVIEW während dem Laden unzählige globale Tabellen konstant updaten muss, und wenn es dass nicht in einem exclusiven Thread tut der durch jemanden anderen jederzeit unterbrochen werden kann, dann würdest Du kein einziges komplexes Programm mehr in den Speicher laden können ohne dass LabVIEW sich früher oder später mit einer Exception verabschiedet. Natürlich könnte LabVIEW dazu auch eine Critical Section bemühen aber das Problem ist dass diese globalen Tabellen and mehreren Stellen in LabVIEW angesprochen werden die teilweise wieder andere kritische Abhängikeiten haben, und die Kombination von mehreren Critical Sections hat eine grosse Gefahr eines sogenannten Priority Invresion Locks, wo zwei Teile sich gegenseitig blockieren weil jeder darauf wartet dass der andere die Resource wieder freigibt.
|
|
|
14.06.2012, 05:35
|
GT123
LVF-Stammgast
Beiträge: 432
Registriert seit: Mar 2009
2018
2008
DE_EN
Schweiz
|
RE: Infofenster bei Applikationsstart
Guten morgen und besten Dank Euch beiden,
ja, FP schliesen müsste reichen, bin mir hierbei nur nicht sicher (gewesen) ob nur das FP sich schliesst und im Hintergrund das BD weiter läuft... sehe es wurde ja bereits erwähnt :-) Zitat:In dem Moment wo kein Frontpanel mehr vorhanden ist, wird eine LabVIEW Applikation abgebrochen
ok, d.h. ich kann mit den Vi Server arbeiten wie ich will, das akualisieren des UI ist währendessen immer blockiert.
Dann denke ich doch wieder an die exe Lösung...
in Splashscreen.vi mit system exec.vi die main.exe starten (wait until done=F),
dann muss ich aber in einer Schleife abfragen ob die main.exe das FP geöffnet hat.
Nur, wie könnte ich das Abfragen "FP einer exe geöffnet" realisieren?
|
|
|
14.06.2012, 12:12
|
rolfk
LVF-Guru
Beiträge: 2.305
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
RE: Infofenster bei Applikationsstart
(14.06.2012 05:35 )GT123 schrieb: Guten morgen und besten Dank Euch beiden,
ja, FP schliesen müsste reichen, bin mir hierbei nur nicht sicher (gewesen) ob nur das FP sich schliesst und im Hintergrund das BD weiter läuft... sehe es wurde ja bereits erwähnt :-) Zitat:In dem Moment wo kein Frontpanel mehr vorhanden ist, wird eine LabVIEW Applikation abgebrochen
ok, d.h. ich kann mit den Vi Server arbeiten wie ich will, das akualisieren des UI ist währendessen immer blockiert.
Dann denke ich doch wieder an die exe Lösung...
in Splashscreen.vi mit system exec.vi die main.exe starten (wait until done=F),
dann muss ich aber in einer Schleife abfragen ob die main.exe das FP geöffnet hat.
Nur, wie könnte ich das Abfragen "FP einer exe geöffnet" realisieren?
Nur über VI Server und dazu musst Du in Deiner Main den VI Server über TCP konfigurieren. Dazu muss man entsprechende Einträge in die <mymain>.ini Deiner Main app machen und dann muss man im Splashscreen zuerst eine Application Reference zu dem "Remote" aufbauen (ja remote auch wenn die Applikation auf dem gleichen Rechner läuft) und dann kann mandiese an Open VI Reference übergeben, dass das weiss welche Instanz kontakiert werden soll. Aber gib Windows etwas Zeit um die exe zu laden und zu starten. Wenn Du gleich nach dem System exe probierst um die Application Reference zu öffnen, hat Windows noch nicht mal das Executabel geladen, geschweige dann dass dieses Zeit hatte um sich zu initialisieren und den VI Server aufzustarten.
Aber ehrlich, so viel Liebesmühe wegen einer kleinen Fortschrittsanzeige!!! Pack Dir irgendwo ein GIF File das etwas Animiertes darstellt und importiere das ins Frontpanel. Animierte Gifs werden bei mir nicht blockiert während des Ladens des Main VIs. Allerdings muss ich auch sagen dass mein Main VI zwar eine Hierarchy von schnell mal 500 bis 1000 VIs enthält, aber das dauert nur Sekunden um das zu laden. Mehr Zeit geht verloren beim Initialisieren der Konfigurationsdaten und der Hardware, aber das geschieht ja nicht mehr in Open VI Reference und blockiert daher im Normalfall auch den UI Thread nicht.
|
|
|
14.06.2012, 13:36
|
GT123
LVF-Stammgast
Beiträge: 432
Registriert seit: Mar 2009
2018
2008
DE_EN
Schweiz
|
RE: Infofenster bei Applikationsstart
Hallo rolfk,
interessant das mit TCP.... aber doch zu aufwendig
Das mit dem Gif wäre völlig ausreichend, mehr will ich gar nicht.
Wie kann ich ein gif ins FP einbinden?
|
|
|
15.06.2012, 07:06
(Dieser Beitrag wurde zuletzt bearbeitet: 15.06.2012 07:07 von rolfk.)
|
|
|
| |