Vector ausgabe

12/02/2016 19:45 thegamingxx#1
hallo, ich bin noch nicht ganz vertraut mit allen c++ funktionen und hätte eine frage und zwar will ich verschiedene variablen abspeichern, ausgeben dies mach ich mit einem vector und funktioniert auch soweit. jetzt muss ich die ganzen variablen von 1 an bis zum letzten eintrag ausgeben. das funktioniert auch nur mit einen problem, sobald ich ausführen drücke schmeißt er mir alle einträge binnen 1ner sekunde aufeinmal raus. ich hätte aber gerne z.b. alle 0,5 sekunden 1. eintrag. den vector lese ich in einem loop aus und ich habe es schon probiert mit sleep. das einzige was passiert ist: dass das bild für "die sleep zeit" hängt und dann alles aufeinmal wieder kommt.

hier noch wie ich es gemacht habe:
// Header
Code:
extern vector<myVec_class> Vec;
extern vector<myVec_class>::iterator VecIt;

class myVec_class{
public:
	int ID;
	int Type;
};
// So speicher ich die werte in den vector.
Code:
myVec_class myvec;
	myvec.ID = ID;
	myvec.Type = Type;
	Vec.push_back(myvec);
// CPP - Ausgeben
Code:
vector<myVec_class> Vec;
vector<myVec_class>::iterator VecIt;

for (VecIt = Vec.begin(); VecIt != Vec.end(); VecIt++)
{
	ID = VecIt->ID;
	Type = VecIt->Type;

		if (ID > 2 && Type == 1)
		{
			ui.textBrowser->append("ID : " + QString::number(ID) + "--Type : " + QString::number(Type));
		}

		if (ID > 2 && Type == 0)
		{
			ui.textBrowser->append("ID : " + QString::number(ID) + "--Type : " + QString::number(Type));
		}
}
wie gesagt bin noch ein ziemlicher newbie ^^ also bitte habt verständnis und ich hoffe hier eine antwort auf mein problem zu finden :D
mit Arrays hab ich es auch probiert aber bin zu dumm dafür glaub ich^^ hat mir immer nur den letzten wert angezeigt :P

lg thegamingxx/godric
12/04/2016 04:18 Slade100#2
void Sleeptime(unsigned int delay){
unsigned int Time= GetTickCount();
while(Time+delay< GetTickCount()){}
}
sollte so klappen habs jetzt nicht getestet, wenn nicht sag bescheid dann schau ich :D
einfach in der for schleife
Sleeptime(500) für 0.5 sec
12/04/2016 11:10 Jeoni#3
Quote:
Originally Posted by Slade100 View Post
void Sleeptime(unsigned int delay){
unsigned int Time= GetTickCount();
while(Time+delay< GetTickCount()){}
}
sollte so klappen habs jetzt nicht getestet, wenn nicht sag bescheid dann schau ich :D
einfach in der for schleife
Sleeptime(500) für 0.5 sec
Das ist nur ein schlechteres Sleep und blockiert den Thread genauso, womit das GUI ebenfalls "hängt".
Habe gerade gegooglet und den ersten Treffer überflogen. Gibt bei Qt u.U. eine "update" und eine "repaint" funktion von der QWidget-Klasse. Erst eine Zeile hinzufügen, dann update und / oder repaint aufrufen, dann Sleep. Ist zwar weit entfernt von elegant (aber wieso sollte man ein Programm generell mutwillig verzögern?), aber dann sollte es klappen, nehme ich an.
Mit freundlichen Grüßen
Jeoni
12/04/2016 13:44 florian0#4
Warum Sleep? Warum ein busy wait? Im Nebenthread, ok, kann man machen. Aber im Hauptthread macht das einfach keinen Sinn.

Umständlich: Nimm dir eine Methode, die zyklisch ausgeführt wird. Dort rechnest du:
Code:
if (last_run < GetTickCount() + wait_time) {
    last_run = GetTickCount();

    /* Dein Vector krams */
}
Einfach: Nimm den QTimer. [Only registered and activated users can see links. Click Here To Register...]
12/04/2016 21:47 thegamingxx#5
danke für eure antworten und mühe mir zu helfen. hab das problem mittlerweile anders gelöst :) und zwar mit arrays und der qt timer funktion :) funktioniert alles einwandfrei.
thread kann geclosed werden
mfg thegamingxx/godric
12/04/2016 21:56 _asm#6
QThread bzw. die thread Klasse aus der standard library (std::thread) kannst du hierfür benutzen, sofern dein Compiler >= C++11 unterstützt, sonst kannst du auch einfach auf die boost library zugreifen, die das gleiche macht.
Vergiss die mutex nicht, damit andere threads nicht auf deinen vector zugreifen können.
12/16/2016 19:00 Remix v242#7
wozu soll er sein projekt unnötig mit qt libs belasten?
bis auf die gui libs ist das framework auch nicht das wahre
würde dann lieber für so was boost benutzen