Deutsch
Forum

Mehrere Threads und Main-Program steuern

 

p.specht

Frage: Gibt es da nicht Speicherlecks, wenn mit dem Schließen-Kreuz abgebrochen wird statt mit ESC-Taste?
 {$cleq}
cls
var n&=0
Print " Theads der Reihe nach beenden mit ESC-Taste!"
var thread&=thread.start(procaddr(meinThread),0,"")
var thread2&=thread.start(procaddr(meinZweiterThread),0,"")

repeat

    locate 10,10:print n&:inc n&;
    waitinput 5

until %key=27

print "\n Habe Hauptschleife verlassen."
waitinput
thread.stop(thread&)

while thread.is(thread&)

endwhile

thread.close(thread&)
print " Habe Thread Nr. 1 beendet."
waitinput
thread.stop(thread2&)

while thread.is(thread2&)

endwhile

thread.close(thread2&)
print " Habe Thread Nr. 2 beendet."
print " Isch 'abe feddisch..."
waitinput 3000
end

nproc meinThread :parameters thread&,dataLong&,dataString$

    whilenot thread.message(thread&)==wm_close

        settext(%hWnd,"Mein FensterTitel - ["+time$(0)+"."+substr$(time$(1),1,".")+"]")
        sleep(1000)

    endwhile

    return 0

endproc

nproc meinZweiterThread :parameters thread&,dataLong&,dataString$

    whilenot thread.message(thread&)==wm_close

        settext(%hWnd,"MEIN FENSTERTI - ("+time$(0)+"."+substr$(time$(1),1,".")+")")
        sleep(900)

    endwhile

    return 0

endproc

 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
13.03.2014  
 




Nico
Madysa
Hallo Peter,

ich habe mir die Freiheit genommen, deinen Code aus Lesbarkeitsgründen in [Code]-Blöcke zu setzen. Dabei habe ich auch ein paar Doppelpunkte aus deinem Quelltext gegen Zeilenumbrüche getauscht, weil sie den seiteninternen Einrückungsparser durcheinander gebracht haben.

Was deine Frage angeht, so habe ich ernsthafte Zweifel, dass da ein Speicherleck existiert. Wenn du den Schließen-Knopf drückst, wird das XProfan-Fenster mit DestroyWindow zerstört und beim Ende des Prozesses sollten auch alle Threads des Prozesses zum Erliegen kommen.

Das sind aber alles nur Vermutungen. Wenn du es genau wissen willst, kannst du ja in einer Schleife das Programm ein paar tausend Mal aufrufen und ihm dann ein WM_CLOSE zukommen lassen, bzw. DestroyWindow auf es anwenden.

Wenn sich das nicht im RAM-Verlauf deines Taskmanagers bemerkbar macht, ist die Sache wahrscheinlich sicher.
 
14.03.2014  
 




p.specht

Danke für die rasche Antwort, Nico! Bin am testen...

Die Frage bezog sich auch auf diese Anmerkung in der xpse-Funktionshilfe, wonach die Funktion tread.is() fälschlicherweise stets Null liefert - sonst könnte das Hauptprogramm merken und abwarten, wenn noch Threads werken. Kennt da jemand einen work-around?
Gruss

P.S.: Mit 'Mutex' zur Synchronisation muss ich mich auch erst beschäftigen. Einen Vorteil gegenüber Polling sehe ich derzeit eher nicht. Den gibt es scheinbar nur bei Problemarten, die mir bislang noch nicht untergekommen sind.
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
17.03.2014  
 




Nico
Madysa
Wenn du keine hohen Geschwindigkeiten brauchst, wäre ein Workaround, XProfan-Multiprozessing zu verwenden. Das ist langsamer, funktioniert aber wenigstens.
Nächste Alternative wäre, mit PExec einen neuen Prozess zu starten, in dem aber wiederum eine NProc aufzurufen. Das ist hässlich, aber das sind Workarounds ja meistens.
 
17.03.2014  
 



p.specht (13.03.14)
Frage: Gibt es da nicht Speicherlecks, wenn mit dem Schließen-Kreuz abgebrochen wird statt mit ESC-Taste?


Windows säubert (zumindest ab ich glaube) Version XP sowieso bei Prozessende.

Das Programm hätte aber Race-Condition-Probleme wenn der Thread läuft und mit hWnd redet ohne dass es hWnd gibt. Müsstest der guten Ordnung halber also vor Zerstörung des hWnd die Threads ordentlich beenden. Somit wird WindowStyle 512 wohl unumgänglich.
 
10.07.2014  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.333 Betrachtungen

Unbenanntvor 0 min.
p.specht12.07.2023
Walter01.04.2020
Axel Berse24.09.2019
E.T.26.12.2018
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

p.specht (2x)
Nico Madysa (2x)
iF (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie