Befehle Gleichzeitig ausführen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Toby

Betreff: Befehle Gleichzeitig ausführen

BeitragDo, Aug 10, 2006 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo alle miteinander,
ich habe eine Frage,
und zwar wird ja für gewöhnlich in einem Blitz Basic Programm ein Befehl nach dem anderen abgearbeitet.

Nun Programmiere ich mit BlitzBasic seit ein paar Monaten besonders in Netzwerk/Internet Bereich, und da kann es nunmal schon vorkommen, dass es etwas Längerdauert, bis die gewünschten Daten durch die Leitung kommen.

Nun ist meine Frage: Ist es möglich bestimmte Prozesse gleichzeitig laufen zulassen, oder gibt es da keine Möglichkeit.

Ich habe mir jetzt überlegt, wenn es keine Möglichkeit gäbe, es mit einem zweiten Programm zu realisieren, dass dann die aufgaben einfach übernimmt und dann an das Hauptprogramm überträgt.

Vielen Dank für eure Hilfe

Toby
Member of
Terra Multimedia

PowerProgrammer

BeitragDo, Aug 10, 2006 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Parallelablaufen lassen, geht nicht, da BB keine Threads oder wie die heißen managen kann! Und 2 BB-Prozesse gleichzeitig laufen lassen, ist keine wirklich gute Idee, da die sich irgendwie immer selbst ausbremsen, - vielleicht gibts das Problem ja nicht, wenn die Programme compilt sind...
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

Hip Teen

BeitragDo, Aug 10, 2006 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich hab sowas schonmal gemacht, indem ich 2 Programme geschrieben hab. Bremst sich auch nicht. Nachteil: Man muss mindestens eins compilt haben, um es zu testen. Kann manchmal nachteilig bei der Fehlersuche sein...
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

Toby

BeitragDo, Aug 10, 2006 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, dann werde ich wohl zwei Programme schreiben

Thx.
Member of
Terra Multimedia

D2006

Administrator

BeitragDo, Aug 10, 2006 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Schwachfug!
Ein Programm reicht doch.
Alle PCs mit einem Prozessorkern können Befehle nur nach einander abarbeiten. Nun meint ihr aber, mit 2 Programmen geht es parallel. Das stimmt so nicht ganz, aber warum scheint es so? Richtig, weil Windows immer mal das und dann wieder das Programm arbeiten lässt. Warum sollte man das also Programmintern nicht genauso machen?

Als Beispiel beim runterladen.
Da gibt es die Möglichkeit - die Toby sicher machte - solange Readbyte zu machen, bis alles durch ist (EOF). Man kann das ganze doch aber auch in eine Funktion reinhauen. In dieser Funktion wird geguckt, ob was zum auslesen da ist (ql:Readavail). Wenn ja, liest man zB maximal 50 Bytes aus und geht aus der Funktion wieder raus. Eine EOF Prüfung darf auch nicht fehlen. Nun ruft man diese Funktion immer aus einer Schleife heraus auf, man kann aber noch andere Sach in die Schleife packen. Zum Beispiel eine Funktion aufrufen, die einen Fortschrittsbalken malt oder so.

Zusammenfassung:
Aufgaben aufsplitten und nicht das ganze Programm warten lassen, bis die Aufgabe erledigt ist.

Das ist übrigens auch der Unterschied zwischen PlayMusic und LoadSound. LoadSound lädt alles in den Hauptspeicher. Das ganze Programm wartet, bis es damit fertig ist. Playmusic liest während des Abspielens von der Festplatte (es streamt quasi) und niemand muss warten.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Hip Teen

BeitragDo, Aug 10, 2006 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Zusammenfassung:
Aufgaben aufsplitten und nicht das ganze Programm warten lassen, bis die Aufgabe erledigt ist.

Das ist soweit richtig, hab ich auch mal gemacht. Beispiel wo das nicht klappt: Auf einem TCP/IP Server zu connecten. Lass mal dein Programm auf einen Server connecten, der nicht vorhanden ist und lass den User keinen Delay spüren. Geht nicht. Und das ist nur ein Beispiel. Gibt noch so ein paar Netzwerkfunktionen, die manchmal für so einen Delay sorgen.
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

D2006

Administrator

BeitragDo, Aug 10, 2006 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ql:TCPTimeouts

Außerdem verbindet man ja nicht dauernd zu einem Server, so dass die paar Sekunden erträglich sind.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

lettorTrepuS

BeitragFr, Aug 11, 2006 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

Dreamora

BeitragFr, Aug 11, 2006 7:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe eh net ganz wo im beschriebenen Fall der nutzen von 2 Exe sein soll, denn die 2te Exe wartet so oder so auf die Daten und sei es nur ein "Server nicht erreichbar". Sie ist zwar faktisch gesehen noch nutzbar nur aufgrund des Tatsache das die Daten gebraucht werden verbessert sich das ganze kein Bisschen.
Hinzu kommt, das man zwischen 2 Exe keine Dateien "teilen" kann, sie also nochmal versandt werden müssen via 2ter Verbindung oder so ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Hip Teen

BeitragFr, Aug 11, 2006 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
<a href="http://www.blitzbase.de/befehle2d/tcptimeouts.htm" class="postlink" target="_blank">TCPTimeouts<img src="/images/quicklink.gif" width="13" height="11" alt="" title="Begriff nachschlagen" border="0"></a>

Außerdem verbindet man ja nicht dauernd zu einem Server, so dass die paar Sekunden erträglich sind.

Was ist wenn ich zu Servern connecten will, die länger zum antworten brauchen? Was ist wenn ich ein Programm schreiben will, wo der Sinn besteht, oft zu Servern zu connecten? Klar könnte man sagen, BB wäre nicht die Sprache dafür, womit man vielleicht etwas recht hätte. Aber es ist in BB möglich, und damit es userfriendly wird, ist es sinnvoll, das ganze in 2 Exe Dateien aufzusplitten.
Zitat:
Ich sehe eh net ganz wo im beschriebenen Fall der nutzen von 2 Exe sein soll, denn die 2te Exe wartet so oder so auf die Daten und sei es nur ein "Server nicht erreichbar".

Das Programm, das auf die Daten wartet, reagiert dafür auf Usereingaben. So kann er (mal als Beispiel) wenn man auf einen Server connecten will, jederzeit abbrechen und weitermachen, ohne Verzögerung.
In dem Programm, wo ich das ganze genutzt habe, wurden laufend Daten heruntergeladen. Der Server, von dem ich das machte, war sehr langsam und so hätte man schlecht gleichzeitig spielen und die Daten runterladen können. So hab ich für das runterladen ein Extra Programm geschrieben. Es lief ohne Probleme.
Zitat:
Jo. Und wer die Server-Informationen (z.B. Ping für eine Server-Liste) mittels TCP anstatt UDP ausliest, der ist sowieso Doof. Zumindest in falle von Blitz3D.

Oft lässt sich TCP/IP nicht vermeiden, denn BB ist nicht nur für Spiele zu gebrauchen.
Natürlich ist die Methode mit 2 Exe Dateien nicht in jedem Fall sinnvoll, es gibt aber Fälle, in denen man damit gut fährt. Und wer sich gegen solche Ansätze verschließt, hat wohl Scheuklappen auf...
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

Dreamora

BeitragFr, Aug 11, 2006 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Frisch und fröhlich rumconnecten geht auch mit TCP net, da Windows nicht so übermässig viele parallele Verbindungen zulässt. Weswegen glaubst du nutzt P2P Software prinzipiell UDP?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

StepTiger

BeitragFr, Aug 11, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
das stimmt so nicht ganz.

Das ist meist eine Mischung aus TCP und UDP (also es wird beides benutzt) weswegen man immer mindestens 2 Ports freigeben muss ^^
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group