Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 08.10.2005, 22:22 Titel: Multithreading |
|
|
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 |
|
|
Eastler_dart
Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 08.10.2005, 22:32 Titel: |
|
|
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 |
|
|
Eastler_dart
Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 08.10.2005, 22:51 Titel: |
|
|
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 |
|
|
d.j.peters Gast
|
Verfasst am: 08.10.2005, 22:55 Titel: |
|
|
Hallo Progger_X,
schreibe zum Debugen oder besser immer am Anfang OPTION EXPLICIT.
Sonnst siehst Du den Fehler nicht so schnell
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
|
Verfasst am: 08.10.2005, 23:32 Titel: |
|
|
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
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 |
|
|
d.j.peters Gast
|
Verfasst am: 08.10.2005, 23:54 Titel: |
|
|
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
|
Verfasst am: 09.10.2005, 00:04 Titel: |
|
|
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 |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 09.10.2005, 00:16 Titel: |
|
|
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 |
|
|
d.j.peters Gast
|
Verfasst am: 09.10.2005, 00:22 Titel: |
|
|
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
|
Verfasst am: 09.10.2005, 00:31 Titel: |
|
|
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 (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 |
|
|
d.j.peters Gast
|
Verfasst am: 09.10.2005, 03:48 Titel: |
|
|
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
|
Verfasst am: 09.10.2005, 10:51 Titel: |
|
|
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 _________________ "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 |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 09.10.2005, 14:42 Titel: |
|
|
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 |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 09.10.2005, 15:19 Titel: |
|
|
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 |
|
|
d.j.peters Gast
|
Verfasst am: 09.10.2005, 17:36 Titel: |
|
|
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
|
Verfasst am: 09.10.2005, 17:50 Titel: |
|
|
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 |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 09.10.2005, 21:27 Titel: |
|
|
Danke, das funzt erstmal. |
|
Nach oben |
|
|
|