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:

Multithreading

 
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: 08.10.2005, 22:22    Titel: Multithreading Antworten mit Zitat

Hallo. Ich habe folgenden Code für Multithreading, um es ein wenig zu verstehen:

Code:

DECLARE SUB senden(param as integer)
DECLARE SUB empfangen(param as integer)
DIM SHARED AS byte threadcontrol=0
DIM SHARED x AS integer
DIM AS integer thread_senden, thread_empfangen
thread_senden    = threadcreate(@senden,    0)
thread_empfangen = threadcreate(@empfangen, 0)
e=0
'SCREEN 18,8,3,1
DO
    Eingabe$=INKEY$
    IF Eingabe$=CHR$(27) THEN e=1
    SCREENLOCK
    CLS
    PRINT x
    SCREENUNLOCK
LOOP UNTIL e=1

threadcontrol=1
threadwait threadsenden
threadwait threadempfangen
PRINT x
SLEEP
END


SUB senden(param as integer)
    DO
        Print "Hallo"
        x=x+1
    LOOP WHILE threadcontrol=0
END SUB

SUB empfangen(param as integer)
    DO
       Print "Hi"
       x=x-1
    LOOP WHILE threadcontrol=0
END SUB


Wieso wird x da immer negativ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eastler_dart



Anmeldungsdatum: 25.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 08.10.2005, 22:32    Titel: Antworten mit Zitat

Ohne die ganz große Ahnung zu haben,
hast du schon mal probiert,
x nicht als Integer sondern
als eine der anderen Zahlenformen
zu declarieren?

In uralten Zeiten hatte ich ein ähnliches
problem, konnte ich auf diese Art
weiter nach hinten verschieben,
dann fing dieses Mysterium erst
weit über einer Million (als Variableninhalt)
wieder an

Vielleicht hilfts dir

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
Eastler_dart



Anmeldungsdatum: 25.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 08.10.2005, 22:51    Titel: Antworten mit Zitat

geschockt ups

zu schnell geguckt.

du hast scheinbar ein anderes Problem,
das mit dem Vorzeichen umkippen ab
einem bestimmten Variableninhalt
ist es bei dir nicht.

kenn mich aber mit der thread-Geschichte
überhaupt nicht aus.

Irgendwie versteh ich dein Programm nicht wirklich.

schon die erste Do-Loop schleifen macht mir
Kopfzerbrechen.
Nach "meiner Logik" (ohgottohgottohgott)
werden ständig X und dann Zeilenschaltung
ausgegeben, bis der User Escape drückt.
Hm. Ist das so?

Danach ruftst du threadwait mit parameter threadsenden auf,
obwohl du oben threadsenden als thread_senden mit werten füllst,
hast du vielleicht ein Schreibfehler beim Variablennamen?

Aber schätze mal, ich blick bloß nicht durch.

sorry, nix für ungut

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
d.j.peters
Gast





BeitragVerfasst am: 08.10.2005, 22:55    Titel: Antworten mit Zitat

Hallo Progger_X,
schreibe zum Debugen oder besser immer am Anfang OPTION EXPLICIT.
Sonnst siehst Du den Fehler nicht so schnell zwinkern

Auch ist SCREENLOCK und SCREENUNLOCK ohne SCREEN Anweisung nicht definiert.

Grüsse Joshy
Nach oben
MisterD



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

BeitragVerfasst am: 08.10.2005, 23:32    Titel: Antworten mit Zitat

bei mir wird x nicht negativ, es schwankt immer von -1 über 0 zu +1, zufällig. Eventuell braucht dein PC deutlich länger für 5 buchstaben (hallo) als für 2 (hi), das wäre so das einzige was mir einfällt wobei ichs nich glauben kann zwinkern

Wenns immer 0 sein sollte müsstest du einfach die beiden threads synchronisieren, sprich zB nur alle 0.1 sekunden schalten oder sowas.
_________________
"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
d.j.peters
Gast





BeitragVerfasst am: 08.10.2005, 23:54    Titel: Antworten mit Zitat

Hallo Progger_X und MisterD benutzt Ihr die gleiche FreeBASIC Version und OS?

Grüsse Joshy
Nach oben
MisterD



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

BeitragVerfasst am: 09.10.2005, 00:04    Titel: Antworten mit Zitat

ich hab jetzt die neue .15b und benutz XP, kA was Progger hat.
_________________
"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: 09.10.2005, 00:16    Titel: Antworten mit Zitat

Ich habe die letze Stable Version, also ich denke 0.14.

Das mit dem Screen wusste ich nicht, ich veränder es jetzt.

Jetzt ist es so:

Code:
DECLARE SUB senden(param as integer)
DECLARE SUB empfangen(param as integer)
DIM SHARED AS byte threadcontrol=0
DIM SHARED x AS integer
DIM AS integer thread_senden, thread_empfangen
thread_senden    = threadcreate(@senden,    0)
thread_empfangen = threadcreate(@empfangen, 0)
e=0
SCREEN 1
DO
    Eingabe$=INKEY$
    IF Eingabe$=CHR$(27) THEN e=1
    SCREENLOCK
    CLS
    PRINT x
    SCREENUNLOCK
LOOP UNTIL e=1

threadcontrol=1
threadwait threadsenden
threadwait threadempfangen
PRINT x
SLEEP
END


SUB senden(param as integer)
    DO
        Print "Hallo"
        x=x+1
    LOOP WHILE threadcontrol=0
END SUB

SUB empfangen(param as integer)
    DO
       Print "Hiho!"
       x=x-1
    LOOP WHILE threadcontrol=0
END SUB


Seltsamerweise stürtzt das Programm ab, wenn ich das Screen rein mache, und schreibt dann ne Fehlermeldung an Microsoft...kA wieso.

Und verändert hat das ganze nicht viel(das jetzt da 5 Buchstaben stehen), nur das es nun manchmal statt ein paar 1000 Negativ auch ein paar Tausend positiv werden. Aber wieso ist das so? Sollte bei Mutlithreading nicht alles gleich behandelt werden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
d.j.peters
Gast





BeitragVerfasst am: 09.10.2005, 00:22    Titel: Antworten mit Zitat

Progger_X schreibe doch mal option explicit in die erste Zeile und behebe ertmal die groben Fehler.
Z.B.

threadwait thread_senden 'und nicht threadsenden und threadempfangen
threadwait thread_empfangen

Grüsse Joshy
Nach oben
MisterD



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

BeitragVerfasst am: 09.10.2005, 00:31    Titel: Antworten mit Zitat

sag ma, hast du das abgetippt? schon ma was von copy&paste gehört? Ich hab dir doch die funktionierende Version gegeben gehabt.. hätteste doch nur kopieren müssen oder einfach runterladen und öffnen, nopaste is doch intelligen happy (von mir eben :>)
_________________
"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
d.j.peters
Gast





BeitragVerfasst am: 09.10.2005, 03:48    Titel: Antworten mit Zitat

Hi MisterD,
an Deiner Version stimmt etwas nicht aktuelle FB 0.15b Schutzverletzung nach dem SLEEP Befehl "Programmende".

Grüsse Joshy
Nach oben
MisterD



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

BeitragVerfasst am: 09.10.2005, 10:51    Titel: Antworten mit Zitat

http://fb.exp-soft.de/fbnp/?view=61
das is meine Version, bei mir läuft die Fehlerfrei, XP mit FB 0.15b..
Die nächsten 3 Versionen im NoPaste oder so sind von Progger weil der den Edit-Button noch ned gefunden hat zwinkern
_________________
"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: 09.10.2005, 14:42    Titel: Antworten mit Zitat

Nein, ich habe versucht, alles nachzuprogrammieren, damit ichs verstehe, sonst kann ichs ja auch nicht auf meine eigenen Programme anwenden.

Da es ein anderes Programm ist als davor, werd ich mal nen Neues nehmen und nicht editieren.
Code

Mit dem Programm habe ich 2 Probleme:
1. Wenn ich Screen 1 rein nehme stürzt es ab
2. Es gibt immer noch Zahlen < -1000 aus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



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

BeitragVerfasst am: 09.10.2005, 15:19    Titel: Antworten mit Zitat

Mit Screens geht bei mir auch ned.. solltest ma auf freebasic.net/forum fragen.
Bei mir tendieren die werte übrigens jetzt eher gegen positiv, hatte nach 30 sekunden ~+8. Also das is "zufällig" aber stört doch eigentlich keinen, oder?
_________________
"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
d.j.peters
Gast





BeitragVerfasst am: 09.10.2005, 17:36    Titel: Antworten mit Zitat

MisterD hat Folgendes geschrieben:
http://fb.exp-soft.de/fbnp/?view=61
das is meine Version, bei mir läuft die Fehlerfrei, XP mit FB 0.15b.


Meinte schon die "richtige" Version und in der Tat es läuft unter Windows bis zum Schluss nur
unter Linux kommt beim Programmende eine Schutzverletzung.

Ich schaue mal was das Problem ist.

Grüsse und einen schönen Sonntag.

Joshy
Nach oben
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 09.10.2005, 17:50    Titel: Antworten mit Zitat

Hallo.

Ich weiß wie du das schaffst, dass der wert immer 0 ist:

anstatt print "hallo" bzw. print "hiho!" schreibst du sleep 1 und dann klappt alles.

Michael
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: 09.10.2005, 21:27    Titel: Antworten mit Zitat

Danke, das funzt erstmal.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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