Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Synchronisieren

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 11.07.2005, 22:47    Titel: Synchronisieren Antworten mit Zitat

Hallo Leute!

Ich schreibe zurzeit ein Spiel, wofür ich einen Synchronen Ablauf auf allen Rechnern brauche. Dafür habe ich das gefunden:

Code:
DO                   ' Start der Main-Schleife
  delay# = TIMER
  ...
  FOR DELAY=1 TO 10000: NEXT DELAY
  LOCATE 1, 1: PRINT TIMER-delay#
LOOP

Leider ist das für Sekunden, meine Schleife soll jedoch 30 mal in der Sekunde aufgerufen werden. Hat jemand dafür einen Code?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 11.07.2005, 23:07    Titel: Antworten mit Zitat

also ich bin mir nicht ganz sicher, ob ich dich richtig verstanden habe. Aber soweit ich das sehe, werden sie beim aktuellen Fred "ON TIMER-Ersatz" geholfen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tobber



Anmeldungsdatum: 01.07.2005
Beiträge: 62
Wohnort: Freudenstadt

BeitragVerfasst am: 11.07.2005, 23:33    Titel: Antworten mit Zitat

Meines Wissens ist in FB der Befehl SLEEP 1000 eine 1-sekündige Wartezeit, der den Wert 1000 in Millisekunden repräsentiert. Du könntest jetzt 1000 durch 30 teilen, dann hättest du Deine 30-er Taktrate. Das wäre 33periode, haut also nicht ganz hin, wäre aber ein Ansatz für die Lösung Deines Problems:

DO

delay# = TIMER
...
sleep 33
LOCATE 1,1:PRINT TIMER-delay#

LOOP
_________________
"Es wurde schon alles gesagt, nur noch nicht von jedem !"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 12.07.2005, 00:47    Titel: Antworten mit Zitat

wenn das für den netzwerk part deines rts ist dann sehe ich nicht wie dieser einfache verzögerer synchronisierung erreichen soll. du mußt eine art netzwerk zeit etablieren damit alle wissen wann sie in ihrem zeitrahmen was ausführen müssen. nicht jeder computer operiert im selben zeitrahmen
_________________
Yagl - yet another gameprogramming library
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 12.07.2005, 14:57    Titel: Antworten mit Zitat

Die von mir eingangs genannte Schleife ist laut QBtimes CPU-unabhängig, d.h. funktioniert an jedem Computer gleich schnell. Das brauche ich, denn wenn ich das habe, kann ich ja die Bewegung der Raumschiffe etc. anpassen, so das sich alles gleich schnell bewegt, aus allen Computern

Code:
DO

delay# = TIMER
...
sleep 33
LOCATE 1,1:PRINT TIMER-delay#

LOOP

Ich denke nicht, das das klappt, denn Sleep 33 wartet ja immer 33 Millisekunden, der Code soll aber 33-x, wobei x die vergangene Zeit ist, warten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 12.07.2005, 19:35    Titel: Antworten mit Zitat

das gegenteil ist der fall die schleife ist mehr als cpu abhängig

Code:
FOR DELAY=1 TO 10000: NEXT DELAY


alleindieser teil sollte dir signalisieren das hier was nicht stimmt. zeitsteuerung über solche suizid schleifen sind nicht sehr überlegen intelligent ( SCNR Zunge rausstrecken ).

und wie gesagt, zur synchronierung mehrerer computer mußt du eine art netzwerk zeit etablieren. aber du mußt mir ja eh nicht glauben Zunge rausstrecken
_________________
Yagl - yet another gameprogramming library
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 12.07.2005, 20:50    Titel: Antworten mit Zitat

Zitat:
#define delay 0.04
t#=TIMER+delay
Do
key$=INKEY$
IF key$="a" Then x=1
SCREENLOCK
CLS
PRINT key$
SCREENUNLOCK
while TIMER<T#:WEND
t#=TIMER+delay
Loop until x=1


Und würde das funzen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 13.07.2005, 11:08    Titel: Antworten mit Zitat

marzec hat Folgendes geschrieben:

und wie gesagt, zur synchronierung mehrerer computer mußt du eine art netzwerk zeit etablieren.


jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 13.07.2005, 11:55    Titel: Antworten mit Zitat

Progger_X hat Folgendes geschrieben:
Zitat:
#define delay 0.04
t#=TIMER+delay
Do
key$=INKEY$
IF key$="a" Then x=1
SCREENLOCK
CLS
PRINT key$
SCREENUNLOCK
while TIMER<T#:WEND
t#=TIMER+delay
Loop until x=1


Und würde das funzen?

Das snychronisiert selbstverständlich alle Rechner. Damit kannst du sogar die Weltherschafft an dich reißen. LOL.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 13.07.2005, 16:24    Titel: Antworten mit Zitat

Na klar synchronisiert das. Wenn alle Rechner zum gleichen Zeitpunkt starten, sollte das logisch sein. Und es klappt ja.

@Helium: du wolltest nix mit mir zu tun haben, jetzt schreib keinen Scheiß in meine Threads.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 13.07.2005, 16:48    Titel: Antworten mit Zitat

Ok, dann starte mal auf 10 Rechner auf die selbe zehntel sekunde das programm.

Sag mir bescheid, wenn du es in diesem Leben noch geschafft hast.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 13.07.2005, 16:50    Titel: Antworten mit Zitat

Die Schleife beginnt, nachdem die beiden Rechner sich verbunden haben(beim server ist dann ne warteschleife bis der Client kommt), und danach klappts ja.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 13.07.2005, 17:46    Titel: Antworten mit Zitat

Mach's doch, wie marzec es schon vorgeschlagen hat, so wäre es wohl ein bisschen störungsunanfälliger...

Aber was rede ich, warum einfach wenn's auch kompliziert geht nicht wahr? zwinkern

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 13.07.2005, 19:17    Titel: Antworten mit Zitat

Mal so ne Frage: Was willst du damit machen?? Ein spiel geht damit nicht. Ein Netzwerk programm auch nicht. Ich erkenne den sinn nicht in diesem Programm. Das soll jetzt nicht böse gemeint sein. Will nur helfen. Was willst du denn damit machen??

Mfg
Michael

EDIT:
Original vom Themenstarter
Zitat:

Die Schleife beginnt, nachdem die beiden Rechner sich verbunden haben(beim server ist dann ne warteschleife bis der Client kommt), und danach klappts ja.


Wenn du dem server schon schickst, dass ein 2. pc im netzwerk ist. Dann kannst du sie doch auch über demselben weg Syncronisieren, oder??
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 13.07.2005, 22:21    Titel: Antworten mit Zitat

Ich mach des einfach so wie ichs einma hab, es funzt, mehr brauch ich net!

Zitat:
Wenn du dem server schon schickst, dass ein 2. pc im netzwerk ist. Dann kannst du sie doch auch über demselben weg Syncronisieren, oder??

Das ist ein Event, das zum Server kommt. Wenn das eintritt, dann ist ein 2. PC verbunden. Aber irgendwie wird das dann durch die Datensendungen(wahrscheinlich wartet er bei empfang bis was da ist) immer gleich schnell. Aber das ging über Internet nicht, und auf langsamen Computern nich. Jetzt gehts.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 14.07.2005, 17:23    Titel: Antworten mit Zitat

Folgender Artikel kann eigentlich bei FreeBasic 1:1 auch angewendet werden:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/EreignisSchleife.html

Ich habe selbst in klassischem QB noch nie etwas ON XXX-mässiges gebraucht.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz