Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 00:09

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Grid schneller Laden?

Discussion on Grid schneller Laden? within the C/C++ forum part of the Coders Den category.

Closed Thread
 
Old   #1
 
elite*gold: 0
Join Date: Oct 2011
Posts: 814
Received Thanks: 675
Grid schneller Laden?

Hi,

hab derzeit nen kleines Problem (Naja, eher stört mich das),
undzwar lade ich ungefähr 500 Files (Zonen) im Spiel, wo angegeben wird ob die Koordinaten X,Y betretbar bzw. unbetretbar sind.

Alles kein Problem, allerdings braucht der schon etwas lange, um die ganzen Zones zu laden, und somit wollte ich fragen wie man den Prozess verschnellern kann.

Code:
	struct MapZones
	{
		short x;
		short y;
		std::vector<std::vector<char>> grid;
	}; MapZones MapZones;

	bool ReadFileZone(std::string filepath)
	{
		//Read File, Error Handling
		//Erste 2 Bytes für x, y auslesen


		MapZones.grid.resize(MapZones.y);

		for(auto i = 0; i < MapZones.y; ++i)
		{
			for(auto a; a < MapZones.x; ++a)
			{
				MapZones.grid[i].push_back(std::getc(file));
			}
		}
	}
Über Hilfe währe ich dankbar.
Trollface- is offline  
Old 01/21/2013, 22:38   #2
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Wenn du mit Windows arbeitest kannst du die ppl nutzen.

Nightblizard is offline  
Thanks
1 User
Old 01/21/2013, 23:38   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
std::for_each nutzt doch afaik Loop-Unwinding, um die Traversierung von Standard-Containern zu beschleunigen.

Die Zeile
Quote:
MapZones.grid.resize(MapZones.y);
lässt sich natürlich auch auf die innere Schleife für die X-Achse übertragen.

Plattformunabhängiger als mit Windows Parallels ginge es sicherlich auch mit std::async() bzw. std::thread im Allgemeinen.

Sinnvoll wäre es sicherlich auch, den Inhalt der Datei in Größeren Blöcken als 1 Byte pro Schleifendurchlauf auszulesen.
MrSm!th is offline  
Thanks
1 User
Old 01/22/2013, 19:30   #4
 
elite*gold: 0
Join Date: Oct 2011
Posts: 814
Received Thanks: 675
Quote:
Originally Posted by Nightblizard View Post
Wenn du mit Windows arbeitest kannst du die ppl nutzen.

Läuft, danke.

Quote:
Originally Posted by MrSm!th View Post
std::for_each nutzt doch afaik Loop-Unwinding, um die Traversierung von Standard-Containern zu beschleunigen.

Die Zeile
lässt sich natürlich auch auf die innere Schleife für die X-Achse übertragen.

Plattformunabhängiger als mit Windows Parallels ginge es sicherlich auch mit std::async() bzw. std::thread im Allgemeinen.

Sinnvoll wäre es sicherlich auch, den Inhalt der Datei in Größeren Blöcken als 1 Byte pro Schleifendurchlauf auszulesen.
Danke.
Den Inhalt habe ich auch schon versucht mit größeren Blöcken auszulesen, die Performance ist aber nur minimal gestiegen, aber das hat sich ja jetzt sowieso erledigt.

Allerdings habe ich nun nen anderes Problem mit der Thread safety, undzwar:

Code:
class TMap
{
	private:
		struct Map
		{
			int vnum;
			MapZones zones;
			std::vector<TSocket> players;
			std::vector<Portals> portals;
			std::vector<Entitys> entitys;
		};

		std::vector<Map> map; //Size 500+
	public:
		Map Map();
		Map ~Map();

		bool AddPlayerToMap(TSocket *Client);
		bool RemovePlayerFromMap(TSocket *Client);
		std::vector<Map> *GetMapList(std::vector<Map> v);
};
Angenommen es laufen 1000~ Socket Threads, jeder Thread muss dauernd auf den Map Vector zugreifen (zum lesen) um z.B. alle Spieler auf allen Maps zu bekommen, nur habe ich keine Idee wie ich das Performance mäßig schnell & sicher hinbekomme.
Habe eventuell überlegt den Vector in die Public zu klatschen und als atomic (C++11 Standart) zu deklarieren, so das getrost alle Threads mit dem Vector arbeiten können, allerdings sagt mir mein Gefühl das ich auf dem falschen Wege bin, hoffe mir kann da jemand weiterhelfen wie das zu lösen ist.

Nachtrag: Hab vergessen zu erwähnen, das wenn nun ein Thread den Vector zum lesen anfordert, und er ihn in einer Schleife durchläuft und genau in diesem Moment ein Spieler z.B. entfernt wird von der Map, fliegt mir das Ding um die Ohren. (ist selbstverständlich)
Trollface- is offline  
Old 01/22/2013, 20:33   #5


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Angenommen es laufen 1000~ Socket Threads
Man sollte für Sockets eigentlich select nutzen und nicht für jede Verbindung einen Thread haben.

Quote:
Habe eventuell überlegt den Vector in die Public zu klatschen und als atomic (C++11 Standart) zu deklarieren, so das getrost alle Threads mit dem Vector arbeiten können, allerdings sagt mir mein Gefühl das ich auf dem falschen Wege bin, hoffe mir kann da jemand weiterhelfen wie das zu lösen ist.
Ein vector kann nicht atomar sein oO

std::mutex und std::lock sind was du suchst.
MrSm!th is offline  
Thanks
1 User
Old 01/22/2013, 21:07   #6
 
elite*gold: 0
Join Date: Oct 2011
Posts: 814
Received Thanks: 675
Quote:
Originally Posted by MrSm!th View Post
Man sollte für Sockets eigentlich select nutzen und nicht für jede Verbindung einen Thread haben.

Ein vector kann nicht atomar sein oO

std::mutex und std::lock sind was du suchst.
Stimmt, dann bleibt die std::atomic variante wohl weg.
Dann werde ich nun auf std::mutex greifen, danke.

Bezüglich der select Funktion, konnte ich mich nicht entscheiden und habe dann die Thread variante gewählt.
Hoffe es ist nicht so "schlimm", hab zwar gelesen das die select Funktion bei vielen Client's besser währe aufgrund des Speichers, aber würde ich gerne erstmal so lassen.

Ansonsten kann hier zu,
bedanke mich nochmals an euch beiden.
Trollface- is offline  
Old 01/22/2013, 21:59   #7


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
1000 Threads...merkste selbst, ne? ;<
MrSm!th is offline  
Closed Thread


Similar Threads Similar Threads
Neuz schneller laden lassen
05/10/2015 - Flyff PServer Guides & Releases - 30 Replies
.
[How²] YouTube Video schneller laden lassen !
04/30/2013 - Tutorials - 27 Replies
Hallo liebe Community und herzlichen Wilkommen zu meinen dritten Tutorial in diesen Forum. Es geht darum wie man ein YouTube Video schnell laden lassen kann damit du es dir auch ohne Probleme anschauen kannst. ● Geh zum Startbutton und auf Ausführen oder einfach Windowstaste+R. ● Gib system.ini ein und bestätige es mit der Eingabetaste. ● Nun öffnet sich ein Editortext mit einen Code, dies löscht ihr bitte. ● Nun kopiert ihr folgendes ein und speichert es einfach ganz normal ab:
Schneller Laden
07/28/2012 - League of Legends - 17 Replies
Hallo Com, Ich habe folgendes Problem unzwar dauert mir das Laden beim Beitreten des Games. Meine Hardware: Prozessor: amd A6-3420M APU with Radeon HD Graphics 1.5 GHz Ram: 8,00 GB Grafikkarte: AMD Radeon HD 6470M AMD RADEON HD 6520G Festplatte: 750 GB SATAII 5.400 UPM
Schneller Laden mit Firefox
03/11/2010 - Tutorials - 19 Replies
Nabend, hab mir mal für euch ein wenig Zeit genommen und ein Video erstellt wo ich euch zeige wie ihr mit Firefox um ein vielfältiges schneller Runterladen könnt ! YouTube - Schneller Laden mit Firefox In 5 - 10 Minuten ist HD verfügbar.
[ Guide ] How To Fertikkeiten Schneller laden
10/30/2008 - Metin2 Guides & Templates - 3 Replies
Hay euch ist bestimmt ma aufgefallen,: z.B ihr mach Aura an des dauert wieder voll lange... da ich hab was herrausgefunden, wie man ds schneller laden kann Aura an machen oder Schwertwirbel.. jenach demm



All times are GMT +1. The time now is 00:12.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.