|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 28.11.2015, 18:27 Titel: Programm funktioniert nicht mehr richtig? |
|
|
Ich stehe irgendwie vor einem kleinem Rätsel. Bin gerade dabei ein Programm zu schreiben, was die TSNE Bibliothek verwendet, um Daten von einem anderen Rechner zu empfangen und gegebenfalls wieder zurück zu senden.
Bei ersten Tests funktionierte das Programm ohne Probleme. Als ich aber etwas neues dazu programmiert habe bzw. nur einen einzigen Wert geändert habe, fuktionierte das Programm nicht mehr, wenn neu kompiliert wurde. Selbst mit -exx zeigt es mir keinerlei Fehler an. Auch alle Mutexe funktionieren auf den ersten Blick ohne Probleme! Woran kann das liegen, dass ein einziger geänderter Wert dafür sorgt, dass das Programm nicht mehr ordnungsgemäß läuft? Das Programm hängt sich nicht auf! Es werden die Daten nicht immer bzw. nur unregelmäßig empfangen. Die Funktion selber, sollte laut Theorie funktionieren!!! Das ist das was mich so wundert? Selbst das löschen eines Kommentars sorgte sogar dafür, dass das Programm nicht richtig funktionierte!
Vielleicht hat von euch schon mal jemand dieses oder so ein ähnliches Problem gehabt?
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 28.11.2015, 18:46 Titel: |
|
|
Stell das Programm hier mal rein.
Das alte und das neue Programm.
Gruss |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 28.11.2015, 19:22 Titel: |
|
|
arduno hat Folgendes geschrieben: | Stell das Programm hier mal rein.
Das alte und das neue Programm.
Gruss | Tja, das würde ich gerne! Nur kann ich das leider aus Markenrechtlichen Gründen nicht tun. Ich bekomme sonst Post vom Anwalt! Außerdem habe ich sowieso nur 1 Programm bzw. bas Datei, da ich immer keine Sicherungsdatei anlege. Was ich machen könnte, wäre über PN den Quellcode euch zukommen lassen. Der darf wirklich nicht an die Öffentlichkeit gelangen (also öffentlich zugänglich sein)! Mit Anwälten ist nicht zu spaßen! Gab es hier nicht schon mal einen Thread, der so ein Problem beschilderte? Muss ich nochmals suchen. Danke für die Hilfe!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 28.11.2015, 20:22 Titel: |
|
|
hmm..hmm.
TSNE Bibliothek .... nur für Privat...mehr darfst du damit nicht ?
Zuletzt bearbeitet von arduno am 29.11.2015, 14:55, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.11.2015, 20:42 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Gab es hier nicht schon mal einen Thread, der so ein Problem beschilderte? Muss ich nochmals suchen. Danke für die Hilfe! |
Also ich hatte auch schon mal das Problem, dass ich meinen Code geändert habe und er danach nicht mehr funktioniert hat. Gelöst habe ich das Problem, indem ich den Code abermals geändert habe, hat bestens funktioniert! Probier das doch auch mal, wenn du uns den Code nicht zeigen willst.
Übrigens kannst du diese markenrecthliche Probleme ganz leicht umgehen, indem du alle Erwähnunge von Marken wie "Coca-Cola" oder "Memory" aus dem Code entfernst, bevor du ihn postest. Dann gibt es nämlich keine Markeninhaber mehr, die sich darüber beschweren könnten. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 28.11.2015, 21:23 Titel: |
|
|
Jojo hat Folgendes geschrieben: | ALWIM hat Folgendes geschrieben: | Gab es hier nicht schon mal einen Thread, der so ein Problem beschilderte? Muss ich nochmals suchen. Danke für die Hilfe! |
Also ich hatte auch schon mal das Problem, dass ich meinen Code geändert habe und er danach nicht mehr funktioniert hat. Gelöst habe ich das Problem, indem ich den Code abermals geändert habe, hat bestens funktioniert! Probier das doch auch mal, wenn du uns den Code nicht zeigen willst.
Übrigens kannst du diese markenrecthliche Probleme ganz leicht umgehen, indem du alle Erwähnunge von Marken wie "Coca-Cola" oder "Memory" aus dem Code entfernst, bevor du ihn postest. Dann gibt es nämlich keine Markeninhaber mehr, die sich darüber beschweren könnten. | Das Problem ist nicht der Name, sondern die Funktion! Die ist nämlich Markenrechtlich geschützt, wenn ich mich nicht irre? Egal, aber danke für den Tipp! Das könnte mir schon wenig weiterhelfen. Vielen herzlichen Dank für die Info!
Hilft es vielleicht, wenn ich den Quellcode aufteile? Also auf mehrere .bas Dateien? Ich hatte schon das Gefühl, dass der Quellcode ab einer bestimmten länge/größe nicht mehr richtig funktioniert! Bisher habe ich 704 Zeilen Code.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.11.2015, 21:39 Titel: |
|
|
Eine Codefunktion kann keine Marke sein und unterliegt damit auch nicht dem Markenschutz.
Und nein, 704 Zeilen Code kann der FreeBASIC grade noch so verkraften, die brauchst du nicht aufteilen. Versuch lieber mal deinen eigenen Code zu verstehen und nachzuvollziehen, warum er nicht das tut, was er soll, statt immer den Compiler zu verdächtigen.
Einfach nur zu sagen "Der Code funktioniert nicht!" hilft halt auch nicht weiter, überlege dir lieber mal was nicht funktioniert (z.B. "Die Berechnung ergibt 6, obwohl 5 bei rauskommen sollte") und dann warum das so ist (im Beispiel: "Hier werden zwei Zahlen addiert, und da sollte 5 bei rauskommen. Aha, bei einer der beiden Zahlen habe ich mich vertippt."). _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 28.11.2015, 23:10 Titel: |
|
|
arduno hat Folgendes geschrieben: | Stell das Programm hier mal rein.
Das alte und das neue Programm.
Gruss |
öm .. doch .. durchaus ... einfach ne kurze mail an /me mit dem zweck der verwendung, und schon is das kein problem mehr ... (Hier gehts einfach darum, das nicht jemand freien code als seinen eigenen massenhaft verscherbeln kann, ohne mit ärger rechnen zu müssen.)
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 29.11.2015, 02:05 Titel: |
|
|
Zitat: | Versuch lieber mal deinen eigenen Code zu verstehen und nachzuvollziehen, warum er nicht das tut, was er soll, statt immer den Compiler zu verdächtigen. | Die eigentliche Funktion in dem Programm funktioniert ja im Grunde genommen. Habe das mit einer seperaten .bas Datei getestet! Es könnte auch an der TSNE Bibliothek liegen. Möglich wär's!
Zitat: | Hier gehts einfach darum, das nicht jemand freien code als seinen eigenen massenhaft verscherbeln kann, ohne mit ärger rechnen zu müssen. | Der Hauptgrund ist die Sorge wegen Verletzung von Markenrechten. Noch dazu wenn das fremder Quellcode ist! Die 2. Sache ist, dass ich bei einer Veröffentlichung, dadurch eine bestimmte Firma langfristig kaputt mache bzw. schade! Und das möchte ja nun auch nicht!
Wie gesagt: Die Funktion funktioniert ohne Mutexe und ohne TSNE ohne Probleme!
Das Programm was ich gerade schreibe, verkauft diese Firma in anderer Form einzeln Stück für Stück! Wenn nun so ein Programm wie das meine vorhanden ist, macht jene Firma weniger Umsatz, weil jeder mein Programm verwendet! _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 30.11.2015, 05:29 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Der Hauptgrund ist die Sorge wegen Verletzung von Markenrechten. Noch dazu wenn das fremder Quellcode ist! |
Das ist Quatsch. Quellcode kann nicht markenrechtlich geschuetzt sein. Du kannst Markenrechte nur verletzen, wenn die Funktion beispielsweise das Logo eines bekannten Hakenförmigen Schuhherstellers[tm] zeichnet oder so.
ALWIM hat Folgendes geschrieben: | Die 2. Sache ist, dass ich bei einer Veröffentlichung, dadurch eine bestimmte Firma langfristig kaputt mache bzw. schade! Und das möchte ja nun auch nicht! |
Was heutzutage Firmen für Schäden entstehen, nur weil unachtsame Programmierer fehlerhafte Ausschnitte aus ihren Programmen in unbekannten Foren veröffentlichen, schlimm das!
ALWIM hat Folgendes geschrieben: |
Wie gesagt: Die Funktion funktioniert ohne Mutexe und ohne TSNE ohne Probleme!
|
wirf valgrind dagegen. Schau nach ob du Raceconditions hast. Schau nach, ob du die TSNE falsch verwendest, im zweifel schreibt die einfach in irgendwelche buffer, die du ihr gibst, völlig egal, ob du den buffer richtig angelegt hast. und überschreibt so vielleicht programmvariablen, weil du einen fehler gemacht hast. versuche, den code ohne ttsne stueck fuer stueck mit der tsne zu erweitern, bis es kaputtgeht. dann weisst du, welche zeile genau fuer das problem verantwortlich ist. kompiliere mit -exx. baue tests ein. mache printfdebugging.
ALWIM hat Folgendes geschrieben: |
Das Programm was ich gerade schreibe, verkauft diese Firma in anderer Form einzeln Stück für Stück! Wenn nun so ein Programm wie das meine vorhanden ist, macht jene Firma weniger Umsatz, weil jeder mein Programm verwendet! |
...ohne worte _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 30.11.2015, 12:59 Titel: |
|
|
Ich wuerde das so machen wie es hier schon angedeutet wurde, mach die aenderung wieder rueckgaengig. Was tut dieser geaenderte Wert denn,
hat er direkt was mit TSNE zu tun? Nach meinen erfahrungen Funktioniert TSNE naemlich fehlerfrei (unter Linux und Windows). Versuch doch mal
ein Beispiel zu Basteln das direkt im zusammenhang mit der TSNE steht. Das geht mit sicherheit auch ohne das da irgent welche Rechte
verletzt werden. Ohne, wird Dir hier wohl kaum einer Helfen koennen. |
|
Nach oben |
|
|
RWK
Anmeldungsdatum: 04.07.2011 Beiträge: 44
|
Verfasst am: 30.11.2015, 14:53 Titel: |
|
|
Du kannst ja auch mal schauen, ob Du im Callback selber zuviel zeitintensives Zeugs machst; lieber weiterreichen.
Mein Programm stürzte mal immer ab, wenn ich zuviel im Callback gebastelt habe. Ist aber auch schon 3 oder 4 Jahre her. Kann jetzt schon ganz anders sein.
Code: | Sub TSNEPlay_Message(ByVal V_FromPlayerID As UInteger, ByVal V_ToPlayerID As UInteger, ByVal V_Message As String, ByVal V_MessageType As TSNEPlay_MessageType_Enum)
Dim As String text = "[NACH] Von PlayerID:" & V_FromPlayerID & " Fuer PlayerID:" & V_ToPlayerID & " Type:"
text = text & " Nachricht:>" & V_Message & "<"
Select Case V_MessageType
Case TSNEPlay_MSGType_Regular : text = text & "[Msg]"
checkMessage(V_FromPlayerID, V_Message)
Case TSNEPlay_MSGType_Private : text = text & "[Pri]"
Case TSNEPlay_MSGType_Notice : text = text & "[Not]"
AddMessage (V_FromPlayerID, V_Message)
Case TSNEPlay_MSGType_Hightlighted : text = text & "[Her]"
Case Else : text = text & "[UNK]"
End Select
End Sub |
Code: | Sub checkMessage(ByVal User As UInteger, ByVal Message As String)
Dim As String xText
Select Case (Left(Message,8))
Case "GogoLauf"
StartLauf
Case "Get_Time"
xText = "Set_Time:" & aktTime
xText += ";" & aktLauf.lStatus
xText += ";" & aktLauf.lName
xText += ";" & aktLauf.lStarter
xText += ";" & aktLauf.lZusatz1
xText += ";" & aktLauf.lZusatz2
TSNEPlay_SendMSG(User, xText )
Case "Get_Teil"
SendeTeilnehmer (User,Message)
Case "Set_Teil"
xText = Mid(Message,10)
If xText = "ALLE" Then
SendeAlleTeilnehmer (user)
Exit Sub
End If
UpdateTeilnehmer(xText)
Case "Set_Lauf"
xText = Mid(Message,10)
If xText = "ALLE" Then
SendeAlleLauf(user)
End If
Case "In_Zeit1"
xText = Mid(Message,9)
IncomingZeit1(xText)
Case "In_Zeit2"
xText = Mid(Message,9)
IncomingZeit2(xText)
Case "In_Platz"
xText = Mid(Message,9)
IncomingPlatz(xText)
End Select
|
Ich hatte seinerzeit mal Probleme mit meinem Progrämmchen als ich meinen Server unter Win10 kompiliert hatte. Keinerlei Fehlermeldung, der client hat losgeschickt, es kam aber nichts beim Server an. Weiss aber nicht mehr warum das so war.
Im übrigen, sollte irgendeiner Firma Umsatzeinbuße erleiden weil Du Dein Progrämmchen da fertigstellst, dann hats das so verdient
Grüße
Rainer |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 30.11.2015, 14:55 Titel: |
|
|
Hat sich vorerst erledigt, da ich bereits Hilfe bekommen habe!
Zitat: | Das ist Quatsch. Quellcode kann nicht markenrechtlich geschuetzt sein. Du kannst Markenrechte nur verletzen, wenn die Funktion beispielsweise das Logo eines bekannten Hakenförmigen Schuhherstellers[tm] zeichnet oder so. | Der andere mit dran Beteiligte verbietet mir, dass ich den Quellcode irgendwo frei zum Download anbiete! Was nun? Man kann nicht einfach fremden Quellcode nach Lust und Laune frei kopieren und zum Download anbieten.
Zitat: | Was heutzutage Firmen für Schäden entstehen, nur weil unachtsame Programmierer fehlerhafte Ausschnitte aus ihren Programmen in unbekannten Foren veröffentlichen, schlimm das! |
Zitat: | Zitat: | Das Programm was ich gerade schreibe, verkauft diese Firma in anderer Form einzeln Stück für Stück! Wenn nun so ein Programm wie das meine vorhanden ist, macht jene Firma weniger Umsatz, weil jeder mein Programm verwendet! | ...ohne worte |
Das Produkt gibt es mit dieser Spezialfunktion bei Firma X und ohne diese Spezialfunktion billiger bei der Konkurrenz. Was glaubt ihr, wo die Leute dann einkaufen, wenn mein Programm vorhanden ist? Richtig, bei der Konkurrenz! Man braucht ja das Produkt der Firma X nicht, denn es existiert mein Programm. Und die Firma X macht weniger Umsatz!!!
Es gibt genug Leute, die ganz scharf drauf sind, so eine Funktion zu besitzen! _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 30.11.2015, 18:15 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Das Produkt gibt es mit dieser Spezialfunktion bei Firma X und ohne diese Spezialfunktion billiger bei der Konkurrenz. Was glaubt ihr, wo die Leute dann einkaufen, wenn mein Programm vorhanden ist? Richtig, bei der Konkurrenz! Man braucht ja das Produkt der Firma X nicht, denn es existiert mein Programm. Und die Firma X macht weniger Umsatz!!! |
Das ist aber lieb von dir, dass du an Firma X denkst. Solange du keine Patente der Firma verletzt, ist es völlig legal ein Konkurrenzprodukt herzustellen. Was meinst du warum es mehr als eine Sorte Handys, mehr als ein Betriebssystem, etc. gibt?
Zitat: | Der andere mit dran Beteiligte verbietet mir, dass ich den Quellcode irgendwo frei zum Download anbiete! Was nun? Man kann nicht einfach fremden Quellcode nach Lust und Laune frei kopieren und zum Download anbieten. |
Es hat auch niemand gesagt, dass du uns das komplette Programm geben sollst. Hilfe hierzu: How to create a Minimal, Complete, and Verifiable example _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 30.11.2015, 20:08 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Das ist aber lieb von dir, dass du an Firma X denkst. | Bei einem möglichen Konkurs ist weder mir noch der Firma geholfen. Ich kaufe nämlich des öfteren bzw. ausschließlich bei der Firma X ein. Wenn dann müsste ich das Ding schon verkaufen, das es Sinn macht, das Programm anderen zur Verfügung zu stellen! Aber selbst die Firma X hat kein Interesse dran, ein solches Computerprogramm zu schreiben! Sonst hätten sie es getan.
Jojo hat Folgendes geschrieben: | Solange du keine Patente der Firma verletzt, ist es völlig legal ein Konkurrenzprodukt herzustellen. Was meinst du warum es mehr als eine Sorte Handys, mehr als ein Betriebssystem, etc. gibt? |
Das stimmt! Nur ist es schwierig, im Vorraus zu wissen, wo auf was jeweils ein Patent drauf ist! Es gibt aber glaub ich, auch eine entsprechende Internetseite wo man nachschauen kann.
Ah, ok verstehe! Ob das bei meinem Problem gereicht hätte? Schließlich wusste ich ja nicht so recht über die Mutexeinsetzung bescheid!
Da ich jetzt weiß, dass es vermutlich an den fehlenden oder falsch eingesetzten Mutexen liegen wird, kann ich da den Hebel ansetzen.
Ich wusste bis vor ein paar Tagen nicht mal, dass man Sleep auch mit einem Mutex versehen soll! Solchen Kleinigkeiten reichen schon aus, dass etwas nicht ornungsgemäß funktioniert!
Ich danke allen für die Hilfe! Mal schauen ob's funktioniert!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 03.12.2015, 01:09 Titel: |
|
|
Code: | MUTEXLOCK(MyMutex)
IF MULTIKEY(&h11) THEN
MUTEXUNLOCK(MyMutex)
MUTEXLOCK(MyMutex)
IF Test(ID(u)) < inhalt AND Sound(ID(u)) < 1 THEN
MUTEXUNLOCK(MyMutex)
TEST
END IF
ELSE
MUTEXUNLOCK(MyMutex)
END IF |
Habe ich das mit dem Mutex jetzt so richtig gemacht?
Wenn ja, dann müsste demnach folgendes so geschrieben werden:
Code: | FOR w = 0 TO 4000
MUTEXLOCK(myMutex)
IF Sound(w) > 0 AND Testsound(w) > 0 THEN
MUTEXUNLOCK(myMutex)
Testen ' Unterprogramm aufrufen
END IF
NEXT |
Hoffe, dass ich das jetzt verstanden habe?
Man muss nur die Logik von der Mutexeinsetzung richtig verstehen! Was man wo und wie alles mit einem Mutex versehen muss.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.12.2015, 01:33 Titel: |
|
|
Zitat: | Habe ich das mit dem Mutex jetzt so richtig gemacht? |
Nein, du hast mindestens ein MutexLock ohne MutexUnlock, was früher oder später zu einem Deadlock führen wird. Und die Mutexe sitzen an komplett sinnlosen stellen. Was willst du genau mit dem Mutex um "IF MULTIKEY(&h11) THEN" überhaupt schützen? MultiKey ist bereits threadsafe, das brauchst du nicht selbst zu schützen.
So wie es aussieht hast du absolut nicht verstanden wozu man Mutexe braucht und wie/wann/wo man sie verwendet.
Hier, noch mal durchlesen, verstehen und nicht nur rauskopieren: https://www.freebasic-portal.de/tutorials/mutexe-54.html _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 03.12.2015, 10:56 Titel: |
|
|
Hallo ALWIM!
Um es einmal bildlich auszudrücken: Ein Mutex ist sowas wie das"Besetzt" - Zeichen an der Toilettentür. Wenn gerade jemand auf dem Boiler sitzt, muß jemand, der auch dort hinmöchte, warten, bis sein Vorgänger fertig ist. Der öffnet dann irgendwann die Tür, das Zeichen wechselt auf "Frei" (MutexUnlock), der nächste betritt das Örtchen, verschließt die Tür (MutexLock) usw.
Das bildliche Äquivalent zum Deadlock darfst du dir jetzt selber ausmalen...
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 03.12.2015, 16:42 Titel: |
|
|
Ich probiere es mal. Aus dem unteren Beispiel nehme ich mir nur den Schleifeninhalt heraus, quasi als Ergebnis eines einmaligen Schleifendurchlaufs.
Code: | ' fehlerhafter Code
MUTEXLOCK(myMutex)
IF Sound(w) > 0 AND Testsound(w) > 0 THEN
MUTEXUNLOCK(myMutex)
Testen ' Unterprogramm aufrufen
END IF |
Wenn die Bedingung nicht erfüllt ist (Sound(w) = 0 oder Testsound(w) = 0), dann passiert folgendes: Der Mutex wird gesperrt, anschließend der Bedingungsblock nicht ausgeführt, der Mutex wird also nicht wieder entsperrt. Schon beim zweiten Durchlauf, wenn der gesperrte Mutex ein weiteres Mal gesperrt werden soll, hängt das Programm komplett fest. Es wartet jetzt auf eine Mutex-Freigabe, die nie eintreten wird.
Wenn du den Zugriff auf Sound(w) und Testsound(w) schützen willst, kannst du folgendermaßen vorgehen:
Code: | DIM AS INTEGER bedingung
MUTEXLOCK(myMutex)
bedingung = (Sound(w) > 0 AND Testsound(w) > 0)
MUTEXUNLOCK(myMutex)
IF bedingung THEN
Testen ' Unterprogramm aufrufen
END IF |
Ergebnis: Der Mutex wird gesperrt, die Variablenwerte werden ausgewertet und der Mutex wird wieder freigegeben. Auf 'bedingung' kann anschließend gefahrlos zugegriffen werden, da es ja keine von mehreren Threads geteilte Variable ist. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 03.12.2015, 16:48 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Hallo ALWIM!
Um es einmal bildlich auszudrücken: Ein Mutex ist sowas wie das"Besetzt" - Zeichen an der Toilettentür. Wenn gerade jemand auf dem Boiler sitzt, muß jemand, der auch dort hinmöchte, warten, bis sein Vorgänger fertig ist. Der öffnet dann irgendwann die Tür, das Zeichen wechselt auf "Frei" (MutexUnlock), der nächste betritt das Örtchen, verschließt die Tür (MutexLock) usw.
Das bildliche Äquivalent zum Deadlock darfst du dir jetzt selber ausmalen...
Gruß
grindstone | Dass ich alle relevanten Variablen mit einem Mutex versehen muss, ist mir ja soweit klar! Nur weiß ich meist nicht genau wie ich die richtig setzen muss! Bei mir gibt es meistens immer Deadlocks. Und genau daran liegt's, dass ich nicht weiß, wie ich diese beschissenen Deadlocks verhindern kann. Vorallem, wenn ich auch noch ein Unterprgramm aufrufe!
Da ich den Quellcode etwas umständlich geschrieben habe, müsste ich demnach auch Laufvariablen mit einem Mutex versehen? Sonst kann es auch hier zu Fehlfunktionen kommen.
Der erste Quellcode, hat keine Deadlocks, was schon einmal gut ist! Nur habe ich anscheinend noch nicht überall Mutexe drin, um Fehlfunktionen zu vermeiden. Beim 2. Entwurf sind wieder sogenannte Deadlocks drin. Also habe ich die Mutexe beim 2. Entwurf schon mal falsch gesetzt.
Ein wenig zu kompliziert die Logik! Das gebe ich zu.
Zitat: | Und die Mutexe sitzen an komplett sinnlosen stellen. Was willst du genau mit dem Mutex um "IF MULTIKEY(&h11) THEN" überhaupt schützen? MultiKey ist bereits threadsafe, das brauchst du nicht selbst zu schützen. | Dann bin ich falsch informiert worden. Irgendeiner hier im Forum hat mir das so mitgeteilt?
Nun gut, habe alle Mutexe bei Multikey jetzt entfernt!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
|
|
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.
|
|