| |
|
|
p.specht
| Thread- nProcs können am Ende einen Return-Wert liefern. Mir ist bloß nicht klar, wie man den im Hauptprogramm ausliest. Gibt es da eine einfache Möglichkeit?
Demo mit 3 gesteuerten Threads:
{$cleqt}
Windowstyle 24
cls rgb(255,200,200)
var edit& =@Create("Edit",%Hwnd,"1",40,20, 140,20)
var edit2&=@Create("Edit",%Hwnd,"2",40,50, 140,20)
var edit3&=@Create("Edit",%Hwnd,"3",40,80, 140,20)
var thread& =thread.start(procaddr(meinThread), edit&, "1000")
var thread2&=thread.start(procaddr(meinZweiterThread), edit2&, "2000")
var thread3&=thread.start(procaddr(meinDritterThread), edit3&, "3000")
var n&=0
font 2
locate 15,1
Print " Theads werden der Reihe nach beendet mittels ESC-Taste!"
Print "\n Hauptprogramm nun in Hauptschleife!"
repeat
locate 23,23:print n&:inc n&
WindowTitle str$(n&)
waitinput 100
until (%key=27) or (%key=2)
print "\n Hauptschleife wurde verlassen."
waitinput 1500
thread.stop(thread&)
while thread.is(thread&)
endwhile
thread.close(thread&)
print "\n Habe Thread Nr. 1 beendet."
waitinput 1500
thread.stop(thread2&)
while thread.is(thread2&)
endwhile
thread.close(thread2&)
print " Habe Thread Nr. 2 beendet."
waitinput 1500
thread.stop(thread3&)
while thread.is(thread3&)
endwhile
thread.close(thread3&)
print " Habe Thread Nr. 3 beendet."
waitinput 1500
beep
print "\n Hier Hauptprogramm: Isch 'abe feddisch... BYEBYE!"
waitinput 3000
END
nproc meinThread :parameters thread&,dataLong&,dataString$
whilenot thread.message(thread&)==wm_close
settext(dataLong&,"["+time$(0)+"."+substr$(time$(1),1,".")+"]")
sleep(1000)
endwhile
return 0
endproc
nproc meinZweiterThread :parameters thread2&,dataLong2&,dataString2$
whilenot thread.message(thread2&)==wm_close
settext(dataLong2&, "("+time$(1)+"."+substr$(time$(0),1,".")+")")
sleep(1333)
endwhile
return 0
endproc
nproc meinDritterThread :parameters thread3&,dataLong3&,dataString3$
whilenot thread.message(thread3&)==wm_close
settext(dataLong3&, "{"+time$(0)+"."+substr$(time$(1),1,".")+"}")
sleep(3000)
endwhile
return 0
endproc
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 25.11.2018 ▲ |
|
|
|
|
p.specht
| Offenbar gibt es eine Variante von Thread.Message auch im Hauptprogramm bzw. im Eltern-Prozess. Muss nur erst draufkommen, wie man das genau abfrägt. Hat das schon jemand geschafft? |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 26.11.2018 ▲ |
|
|
|
|
| Wenn ich mich recht erinnere, dann ist thread& ein 44 Byte großer Speicher -
die Werte nach thread.message() per wParam, lParam stehen in thread& an Offset 24, 28 und 32 aber erst wenn die Funktion thread.message verwendet wurde. Vorher stehen diese 3 Werte an den Pos. 12, 16, 20.
Für geordnete Kommunikation mit der Hauptschleife vlt. am Besten Win32 SendMessage verwenden.
Nun bin ich mir dennoch nicht sicher, ob ich damit geholfen habe. |
|
|
| |
|
|
|
p.specht
| Danke iF, werd´s versuchen ... |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 27.11.2018 ▲ |
|
|
|