Seite 2 von 2
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 21.07.2013 13:51
von HeX0R
Daffy0815 hat geschrieben:Auch werden nur die tatsächlich verfügbaren Schnittstellen zurückgegeben während die andere Routine keinerlei Rücksicht darauf nimmt
ob die Schnittstelle bereits von einem anderen Programm verwendet wird.
Der verlinkte Code gibt die an einem PC vorhandenen Schnittstellen zurück, das ist das, was ich von einem Programm erwarten würde.
Ob nun eine davon im Moment besetzt ist, ist egal, physikalisch vorhanden ist sie dennoch.
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 21.07.2013 14:16
von Daffy0815
NicTheQuick hat geschrieben:Zwei Hinweise dazu. Es macht nicht viel Sinn, ComPorts global zu machen, wenn du es eh an die Procedure übergibst. Außerdem ist es eigentlich schneller, wenn man zuerst das Array auf die maximale Anzahl Element resized, also auf 256, und es am Schluss dann wiederum so klein macht wie es nötig ist. Dann spart man sich die möglichen 256 mal Redim und reduziert dessen Aufrufe somit auf 2.
Da liegt wohl ein Missverständnis vor!
Sin und Zweck der Prozedur ist es festzustellen welche ComPorts verfügbar sind damit das eigentliche Programm über das global Array diese dann zur Auswahl anbieten kann.
Das mit dem 256 X ReDim ist korrekt. Das liegt bei mir einfach daran, dass ich es auf Grund meiner sonstigen Programme im Bereich Microcontroller gewöhnt bin "sparsam" mit Speicher umzugehen.
Daffy0815 hat geschrieben:Dann noch ein paar Fragen: Wieso schreibst du hinter jede Variable nochmal ihren Typ, obwohl das beim ersten mal reicht anzugeben? Und für meinen Geschmack kommt hinter das Next kein Variablennamen mehr, aber naja.
Nun, das hat den Vorteil das man immer weis welchen Typ die Variable hat!
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 21.07.2013 14:19
von Daffy0815
HeX0R hat geschrieben:Der verlinkte Code gibt die an einem PC vorhandenen Schnittstellen zurück, das ist das, was ich von einem Programm erwarten würde.
Ob nun eine davon im Moment besetzt ist, ist egal, physikalisch vorhanden ist sie dennoch.
Meine ursprüngliche Frage war nach "verfügbaren" Schnittstellen nicht nach "vorhandenen".
Ein Programm das durch den Zugriff auf eine zwar vorhandene aber von einem anderen Programm benutzte Schnittstelle blockiert wird finde ich persönlich nicht so "prickelnd"!
__________________________________________________
Falsche Zitierung korrigiert
21.07.2013
RSBasic
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 22.07.2013 11:53
von NicTheQuick
Daffy0815 hat geschrieben:Da liegt wohl ein Missverständnis vor!
Sin und Zweck der Prozedur ist es festzustellen welche ComPorts verfügbar sind damit das eigentliche Programm über das global Array diese dann zur Auswahl anbieten kann.
Gut, aber dann brauchst du das Array auch nicht als Parameter zu übergeben.
Daffy0815 hat geschrieben:Das mit dem 256 X ReDim ist korrekt. Das liegt bei mir einfach daran, dass ich es auf Grund meiner sonstigen Programme im Bereich Microcontroller gewöhnt bin "sparsam" mit Speicher umzugehen.
Dann solltest du lernen auch auf einem PC effizient zu programmieren. Dein Vorgehen ist hier nämlich nicht effizient und wäre es auf einem Mikrocontroller auch nicht wirklich. Bei jedem vergrößerndem Redim kann es passieren, dass der nun größere Speicherbereich nicht mehr an dieser Stelle vergrößert werden kann und somit an anderer Stelle im Speicher alloziert werden muss, wodurch solange der doppelte Speicher verbraucht wird wie es dauert den Inhalt des alten Arrays an die Speicherstelle des neuen zu kopieren. Dann erst wird der Speicher des alten wieder freigegeben.
Alloziert man allerdings von Anfang an die maximale Größe, die das Array haben kann, dann kann es nur noch kleiner werden. In deinem Fall würde man im schlechtesten Fall zwischenzeitlich 255 + 256 = 511 Elemente allozieren und in meinem Fall nur 256 Elemente.
Daffy0815 hat geschrieben:Nun, das hat den Vorteil das man immer weis welchen Typ die Variable hat!
Gut, wenn man das nicht selbst überblicken kann, dann macht man das halt so. Sauberer ist es trotzdem, wenn man Typen nur einmal an einer Stelle deklariert und das war's dann. Somit kann man sie auch nachträglich wesentlich schneller ändern, ohne dass man den ganzen Code durchsuchen muss.
Siehe das bitte einfach nur als konstruktive Kritik an. Da steckt nichts persönliches dahinter. (Und in diesem Forum wird ja gerne persönlich auf Kritik reagiert

).
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 22.07.2013 12:11
von Daffy0815
@NickTheQuick
Warum das Array nicht übergeben?
Ich will doch im Hauptprogramm anhand des Arrays die Schnittstellen zur Auswahl anbieten.
Wie soll das gehen ohne Zugriff auf das Array zu haben?
NaJa, wollen wir mal doch etwas mehr bei der Realität bleiben!
Die Gefahr das der ReDim 256 mal ausgeführt wird tendiert doch gegen NULL!
Welcher PC hat so viele serielle Schnittstellen?
Mein PC ist mit 5 Stück doch bereits ein Exot.
Die Gefahr das die 3. Schnittstelle "Com33" heißt ist aber durchaus vorhanden!
Was das mit den Datentypen betrifft, so kostet es mich bei dem von mir verwendeten (selbst geschriebenen) Multi-File-Editor ein "müdes lächeln" sämtliche Variablennamen "Name.i" in "Name.irgendwas" zu ändern.
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 22.07.2013 14:24
von NicTheQuick
Daffy0815 hat geschrieben:@NickTheQuick
Warum das Array nicht übergeben?
Ich will doch im Hauptprogramm anhand des Arrays die Schnittstellen zur Auswahl anbieten.
Wie soll das gehen ohne Zugriff auf das Array zu haben?
Na wenn du ComPorts sowieso als globales Array ('Global Dim ComPorts.i(0)') hast, dann ist es doch in der innerhalb 'GetAvailableComPorts()'-Funktion ebenfalls vorhanden. Also musst du es gar nicht mehr übergeben. Das meinte ich damit.
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 22.07.2013 21:16
von Daffy0815
Ach so meinst Du das!
Das ist natürlich richtig....
Gruß
Daffy