| |
|
|
Jens-Arne Reumschüssel | good evening,
i'm today with Durchsicht the XProfan-Managers of Dietmar horn on The Thread.pcu-Unit of iF punched. with this can up to four "Threads" in a XProfan-Program run, The allegedly the Hauptprogramm prozessortechnisch not load. the has naturally my curiosity geweckt - I have me demand, How to that devil's it the well made has. Multithreading goes Yes known with XProfan not. After some Time be I on The idea come, that the well over Timer runs, The windows z.B. too then aufruft, if the Hauptprogramm straight in the WaitInput stick. there's with the SetTimer-API-function namely The Possibility, a Callback-routine einzubinden. And so is it sure too, How defined Tests show. because this is naturally no real Multithreading, separate during the Abarbeitung the Timer-routines is the Hauptprogramm blockiert. one can means not really insist, that it prozessortechnisch not charged would. nevertheless weg so very interesting items, The run out can, during the Hauptprogramm on Inputs wait.
I have the interessehalber time nachgebaut:
$H windows.ph
Declare _aProc%,_aProc2%,_hTimer%,_hTimer2%,_hTimer3%,_hT%,_hT2%,_Count%,_Count2%,_Ende%
PROC TimerProc
'unnamedParam3&=Timer-lever, so can between whom individual Timern discern (The Parameterbezeichnung stammt of Microsoft, closer Erläuterungen there moreover in the MSDN not)
'deference: During the Abarbeitung one TimerProc-Aufrufes runs the Hauptprogramm not further! it deals it itself even not circa real Multithreading. therefore only short Codes use.
Parameters unnamedParam1&,unnamedParam2&,unnamedParam3&,unnamedParam4&
If unnamedParam3&=_hTimer%
Print "Timer 1 aufgerufen"
ElseIf unnamedParam3&=_hTimer2%
Print "Timer 2 aufgerufen"
EndIf
ENDPROC'TimerProc
PROC DoSomethingFast
Parameters unnamedParam1&,unnamedParam2&,unnamedParam3&,unnamedParam4&
Inc _Count%
SetText _hT2%,"Timer 3: "+@Str $(_Count%)
ENDPROC'DoSomethingFast
Cls
Print "Programmende with Escape"
Print
_hT%=@Create("TEXT",%Hwnd,"Hauptprogramm: 0",250,10,160,20)
_hT2%=@Create("TEXT",%Hwnd,"Timer 3: 0",250,35,160,20)
_aProc%=@ProcAddr("TimerProc",4)'Funktionsadresse the TimerProc detect
_aProc2%=@ProcAddr("DoSomethingFast",4)
'Timer 1 produce
'Parameter 1 & 2 must 0 his, 3 is the Wartezeit until next appeal in Millisekunden, 4 is the address the TimerProc.
'deference: The Aufrufzeit must not with of/ one previous edit the TimerProc overlap, tappt im dunkeln must means long enough chosen his, so The TimerProc to the next appeal ready becomes!
'one can naturally for different Timer different Procs use, as long as it free @ProcAddr-burst gives. then is the Überschneidungsproblem not integrally so big.
'Also could one at employment of JRPC3 speedy native Procs use, The no real Zeitproblem produce. this would too The constraint the disengaged @ProcAddr-burst eliminating.
_hTimer%=~SetTimer(0,0,1000,_aProc%)
'Waiting, so it a fühlbaren Zeitunterschied into Call the Timer gives
Sleep 300
'Timer 2 produce
_hTimer2%=~SetTimer(0,0,1000,_aProc%)
'Timer 3 produce (faster appeal)
'The temporal dissolution Windows-Timers is ca. 16ms; 10 guaranteeing therefore whom schnellstmöglichen appeal the Timers.
'But this is still very slow in the comparison To echtem Multithreading, there so maximum well 60 Aufrufe per second possible are - for many interesting items might the nevertheless suffice.
_hTimer3%=~SetTimer(0,0,10,_aProc2%)
User Messages $10'End of program
_Ende%=0
WhileNot _Ende%
'The Timer walk independent and go Windows too during the WaitInputs called, you're means independent of the Haupteingabeschleife the Hauptprogramms.
'During Sleep go The Timer though not worn out, the works evident Profan-Program-far.
WaitInput 250
If (@iskey(27) and (~GetForegroundWindow()=%HWnd)) Or (%UMessage=$10)
_Ende%=1
Endif
Inc _Count2%
SetText _hT%,"Hauptprogramm: "+@Str $(_Count2%)
EndWhile
~KillTimer(0,_hTimer%)
~KillTimer(0,_hTimer2%)
~KillTimer(0,_hTimer3%)
End
circa my These To occupy, that the Hauptprogramm by the TimerProc blockiert becomes, can simply time a long Loop (for i%,0,100000) in these install. During tappt im dunkeln worn out becomes, becomes the Hauptprogramm-counter not updated. this is with Use the Unit just as.
best Regards, Jens-Arne |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 07/10/23 ▲ |
|
|
|
|
p.specht
| if one The Threads on different Prozessorkernen one zB Quadcores running bring can, should still one performance-profit To achieve his. windows can of my WIssens suitable Programmbefehle only as "Empfehlungen" To, The thing is of all others konkurrierenden Prozessen in the system tributary. (with Vorbehalt: my Hirn is in last Time there unfortunately not very reliably) |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 07/10/23 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | the are so no real Treads. therefore walk tappt im dunkeln always on the core, the the XProfan-Program allocated is. the XProfan-Program verzweigt sozusagen to TimerProc, if the Timer this auslöst. nevertheless find I the Real "cool", if I the once so say must. On what not over ands over again stößt, if one The ideas the middle-aged Grandseigneurs ours terrific Language durchforstet! |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 07/10/23 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | in the Contrast moreover go real Threads objectively automatically on all Kernen carryed out, if to the not artificially prevented. One example is my Apfelmännchenprogramm in the JRPC3-part this Forums. For this need one but code, the multithreadingfähig is - the goes in XProfan not without expedient, separate for needed one z.B. FreeBasic or PureBasic (you know already, fbProcs and pbProcs in JRPC3 ). |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 07/10/23 ▲ |
|
|
|