Wie gehts: Zeiger auf array bei return?
-
Hmm, dann ist das also quasi ein Zeiger?
Wenn die Funktion das array übergeben hat, dann wird das in einer Textbox ausgegeben.
Das alles zusammen sind ca 2-3 sec, und das sollte schneller gehen.
Wie könnte ich das schneller bekommen?
-
Poste doch mal deinen Code...
2-3Sekunden ist echt übel. Sofern du da keine unmengen an Text hast, ist da was verkehrt.
-
nibbler schrieb:
meine Funktion übergibt ein array mit 100 string-Elementen.
Allerdings dauert die Übergabe 2 Sekunden.Wie kommst Du auf diesen Wert???
Zeig doch mal bitte den Source Deiner aufrufenden Funktion und der aufgerufenen Funktion...
-
Die Dll wird aus der GUI mit einer while-Schleife aufgerufen, die Funktion in der Dll gibt dann das 100er String-Array zurück.
Danach ist die Ausgabe in die Textbox in der GUI, und zwar bevor die Dll-Funktion wieder aufgerufen wird.Auf die Zeit komme ich, da ich in der Dll über USB Signale empfange und einen timestamp dazupacke.
Und weil die Dll ja durch die while-Schleife wieder aufgerufen wird, kann ich die timestamps vergleichen.
Daher habe ich die 2sec, die ja offensichtlich bei der Textbox verloren gehen.Die Ausgabe in die Textbox (Code in Form1.h):
for(int i=0; i<100; i++) this->TextBox1->Text += String::Format("{0}{1}", DllOutput[i], Environment::NewLine);
-
Um Strings zusammenzusetzen verwendet man aber nicht "+=" sondern man nimmt den "StringBuilder"!!!!
-
Ok, habe ich jetzt gemacht:
for(int i=0; i<100; i++) { StringBuilder^ sb = gcnew StringBuilder(DllOutput[i]); sb->Append(Environment::NewLine); this->TextBox1->Text += sb->ToString(); }
Ich habe aber immer noch Probleme...
Das Schreiben der Daten in die Textbox habe ich jetzt auch noch in einen thread ausgelagert:
In einer while-Schleife starte ich jetzt den ersten thread, der die Datenbeschaffung regelt (also die Dll-Funktion startet).
Nachdem die Daten aus der Dll da sind startet jetzt noch ein zweiter thread für das Updaten der Textbox.
In der while sind nur diese beiden threads.Für mein Verständnis läuft dann das updaten der Textbox parallel zur Beschaffung neuer Daten. Richtig?
Zumindest beschleunigt das die Übergabe gegenüber ohne thread schon erheblich.Problem:
Das Beschaffen der Daten scheint schneller zu sein als das Updaten der Textbox.
Sieht man daran, dass die Abstände der Aktualisierung der Textbox erst geringer werden, später keine Abstände mehr erkennbar sind.
Dürfte auf kurz oder lang nicht gut gehen und das Programm crashen...Frage:
Wie bekomme ich das Updaten schneller?Gruß
-
Du solltest vielleicht den StringBuilder *ausserhalb* der Schleife erzeugen!!!
Also:StringBuilder^ sb = gcnew StringBuilder(); for(int i=0; i<100; i++) { sb->Append(DllOutput[i]); sb->Append(Environment::NewLine); } this->TextBox1->Text = sb->ToString();
-
Danke, jetzt updated die schnell genug.
Ich vermute aber, dass das hauptsächlich an dem aus der for-Schleife herausgenommenen Updaten der Textbox liegt, weil das ja nur noch ein Zugriff ist.Hat die Textbox eine maximale Zeilenzahl, oder kann ich die beliebig vollschreiben?
-
Steht unter der Eigenschaft MaxLength:
32767 (Zeichen/Buchstaben)
Wieviel Zeilen das sind, weiß ich nicht. Aber kann man ja ausrechnen, wenn man weiß, wieviel Zeichen in eine Zeile passen.
-
Damit hast du mir das passende Stichwort geliefert, danke.
Allerdings ist der Wert abhängig von Singleline und Multiline, sowie dem benutzten Betriebssystem.Mehr Infos gibts hier: http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfsystemwindowsformstextboxbaseclassmaxlengthtopic.asp