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:

Programm funktioniert nicht mehr richtig?
Gehe zu Seite 1, 2  Weiter
 
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
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 28.11.2015, 18:27    Titel: Programm funktioniert nicht mehr richtig? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 236

BeitragVerfasst am: 28.11.2015, 18:46    Titel: Antworten mit Zitat

Stell das Programm hier mal rein.
Das alte und das neue Programm.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 28.11.2015, 19:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 236

BeitragVerfasst am: 28.11.2015, 20:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.11.2015, 20:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 28.11.2015, 21:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.11.2015, 21:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 28.11.2015, 23:10    Titel: Antworten mit Zitat

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 zwinkern ... (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 ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 29.11.2015, 02:05    Titel: Antworten mit Zitat

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! verwundert

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
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1208

BeitragVerfasst am: 30.11.2015, 05:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 30.11.2015, 12:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
RWK



Anmeldungsdatum: 04.07.2011
Beiträge: 44

BeitragVerfasst am: 30.11.2015, 14:53    Titel: Antworten mit Zitat

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 mit den Augen rollen

Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 30.11.2015, 14:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 30.11.2015, 18:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 30.11.2015, 20:08    Titel: Antworten mit Zitat

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.

Jojo hat Folgendes geschrieben:
Es hat auch niemand gesagt, dass du uns das komplette Programm geben sollst. Hilfe hierzu: How to create a Minimal, Complete, and Verifiable example
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! lächeln

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 03.12.2015, 01:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 03.12.2015, 01:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 849
Wohnort: Ruhrpott

BeitragVerfasst am: 03.12.2015, 10:56    Titel: Antworten mit Zitat

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... grinsen

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4209
Wohnort: ~/

BeitragVerfasst am: 03.12.2015, 16:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

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

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... grinsen

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
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
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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