Français
Source/ Codesnippets

unechtes Multithreading sur Minuteur

 

Jens-Arne
Reumschüssel
Guten soir,

je suis aujourd'hui chez Durchsicht des XProfan-Managers de Dietmar Horn sur qui Fil.pcu-Unit de iF gestoßen. avec cette peux on jusque quatre "Threads" dans einem XProfan-Programme courir laisser, qui angeblich cela Hauptprogramm prozessortechnisch pas belasten. cela hat naturellement mon curiosité geweckt - j'ai mich gefragt, comment zum Teufel il wohl gemacht hat. Multithreading allez oui bekanntlich avec XProfan pas. Pour einiger Zeit suis je sur qui concept gekommen, dass cela wohl sur Minuteur fonctionne, qui Windows z.B. aussi ensuite aufruft, si cela Hauptprogramm justement im WaitInput steckt. il y a chez qui SetTimer-API-Funktion nämlich qui Possibilité, une Callback-Routine einzubinden. et so ist es sûrement aussi, comment bestimmte Tests montrer. car c'est naturellement ne...aucune réel Multithreading, mais au cours de qui Abarbeitung qui Minuteur-Routinen ist cela Hauptprogramm blockiert. il peut alors pas wirklich behaupten, dass es prozessortechnisch pas belastet serait. quand même aller avec cela très interessante Dinge, qui ablaufen peut, au cours de cela Hauptprogramm sur Eingaben wartet.

j'ai cela interessehalber la fois nachgebaut:
 $H windows.ph
Déclarer _aProc%,_aProc2%,_hTimer%,_hTimer2%,_hTimer3%,_hT%,_hT2%,_Count%,_Count2%,_Ende%

PROC TimerProc

    'unnamedParam3&=Timer-Handle, avec cela peux on entre den individuel Timern unterscheiden (qui Parameterbezeichnung stammt de Microsoft, nähere Erläuterungen gibt es en supplément im MSDN pas)
    'attention: Au cours de qui Abarbeitung eines TimerProc-Aufrufes fonctionne cela Hauptprogramm pas plus! Es handelt es sich plan pas um réel Multithreading. Daher seulement kurze Codes verwenden.
    Paramètres unnamedParam1&,unnamedParam2&,unnamedParam3&,unnamedParam4&

    Si unnamedParam3&=_hTimer%

        Imprimer "Timer 1 aufgerufen"

    ElseIf unnamedParam3&=_hTimer2%

        Imprimer "Timer 2 aufgerufen"

    EndIf

ENDPROC'TimerProc

PROC DoSomethingFast

    Paramètres unnamedParam1&,unnamedParam2&,unnamedParam3&,unnamedParam4&
    Inc _Count%
    SetText _hT2%,"Timer 3: "+@Str$(_Count%)

ENDPROC'DoSomethingFast

Cls
Imprimer "Programmende avec Escape"
Imprimer
_hT%=@Créer("TEXT",%Hwnd,"Hauptprogramm: 0",250,10,160,20)
_hT2%=@Créer("TEXT",%Hwnd,"Timer 3: 0",250,35,160,20)
_aProc%=@ProcAddr("TimerProc",4)'Funktionsadresse qui TimerProc ermitteln
_aProc2%=@ProcAddr("DoSomethingFast",4)
'Minuteur 1 erzeugen
'paramètre 1 & 2 doit 0 son, 3 ist qui Wartezeit jusqu'à zum prochain Aufruf dans Millisekunden, 4 ist qui Adresse qui TimerProc.
'attention: qui Aufrufzeit darf sich pas avec einer vorhergehenden Bearbeitung qui TimerProc überschneiden, vous muss alors long genug gewählt son, sodass qui TimerProc avant dem prochain Aufruf fertig wird!
'il peut naturellement pour verschiedene Minuteur différent Procs verwenden, solange es freie @ProcAddr-Plätze gibt. ensuite ist cela Überschneidungsproblem pas entier aussi grand.
'Aussi pourrait on beim Einsatz de JRPC3 schnelle native Procs verwenden, qui ne...aucune réel Zeitproblem erzeugen. ca serait aussi qui Beschränkung qui freien @ProcAddr-Plätze beseitigen.
_hTimer%=~SetTimer(0,0,1000,_aProc%)
'attendre, avec cela es une fühlbaren Zeitunterschied dans den Aufrufen qui Minuteur gibt
Sleep 300
'Minuteur 2 erzeugen
_hTimer2%=~SetTimer(0,0,1000,_aProc%)
'Minuteur 3 erzeugen (plus rapide Aufruf)
'qui zeitliche Auflösung des Windows-Timers ist ca. 16ms; 10 garantiert daher den schnellstmöglichen Aufruf des Timers.
'c'est mais toujours très lente im comparaison trop echtem Multithreading, là so maximum bien 60 Aufrufe pro seconde possible sommes - pour viele interessante Dinge pourrait cela quand même ausreichen.
_hTimer3%=~SetTimer(0,0,10,_aProc2%)
Utilisateur Messages $10'Programmende
_Ende%=0

WhileNot _Ende%

    'qui Minuteur courir indépendant et volonté de Windows aussi au cours de des WaitInputs aufgerufen, ils sont alors indépendant de qui Haupteingabeschleife des Hauptprogramms.
    'Au cours de Sleep volonté qui Minuteur allerdings pas abgearbeitet, cela wirkt évident Profan-Programme-large.
    WaitInput 250

    Si (@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%)
Fin

Um mon These trop belegen, dass cela Hauptprogramm par qui TimerProc blockiert wird, peux on simple la fois une longtemps Boucle (for i%,0,100000) dans cet einbauen. Au cours de vous abgearbeitet wird, wird qui Hauptprogramm-Zähler pas aktualisiert. c'est chez Nutzung qui Unit genauso.

Beste Grüße, Jens-Arne
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
10.07.2023  
 




p.specht

si on qui Threads sur verschiedenen Prozessorkernen eines zB Quadcores zum courir apporter peux, devrait doch un Performance-Gewinn trop erreichen son. Windows läßt meines WIssens entsprechende Programmbefehle seulement comme "Empfehlungen" trop, qui l'affaire ist de allen anderen konkurrierenden Prozessen im System dépendant. (avec Vorbehalt: mon Hirn ist dans dernier Zeit là malheureusement pas très zuverlässig)
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
10.07.2023  
 




Jens-Arne
Reumschüssel
ce sont oui aucun echten Treads. c'est pourquoi courir vous toujours sur dem Kern, qui dem XProfan-Programme zugewiesen ist. cela XProfan-Programme verzweigt sozusagen zur TimerProc, si qui Minuteur ca auslöst. quand même finde je cela vraie "cool", si je cela einmal so dire darf. sur quoi on pas toujours wieder stößt, si on qui idées qui alten Grandseigneurs unserer grandiosen Discours durchforstet!
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
10.07.2023  
 




Jens-Arne
Reumschüssel
Im opposition en supplément volonté echte Threads réellement automatisch sur allen Kernen fonctionnement, si on cela pas künstlich verhindert. un Beispiel ist mon Apfelmännchenprogramm im JRPC3-partie cet Forums. Pour cette braucht on mais Code, qui multithreadingfähig ist - cela allez dans XProfan pas sans Hilfsmittel, mais pour nécessaire on z.B. FreeBasic ou bien PureBasic (tu sais déjà, fbProcs et pbProcs dans JRPC3 ).
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
10.07.2023  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.377 Views

Untitledvor 0 min.
Sven Bader22.11.2023
ByteAttack27.10.2023
Uwe ''Pascal'' Niemeier17.10.2023
HofK07.09.2023
plus...

Themeninformationen

cet Thema hat 2 participant:

Jens-Arne Reumschüssel (3x)
p.specht (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie