Español
Fuente/ Codesnippets

unechtes Multithreading encima Temporizador

 

Jens-Arne
Reumschüssel
Bueno Abend,

Yo bin heute en Examen des XProfan-Managers de Dietmar Horn en el Hilo.pcu-Unit de IF gestoßen. Mit dieser puede ser a a vier "Threads" en un XProfan-Programa laufen dejar, el angeblich el Hauptprogramm prozessortechnisch no belasten. Das ha natürlich mi Neugier geweckt - Yo mich gefragt, como para Diablo él el wohl gemacht ha. Multithreading va sí bekanntlich con XProfan no. Nach einiger Tiempo bin I el Concepto gekommen, dass el wohl encima Temporizador se ejecuta, el Windows z.B. auch entonces aufruft, si el Hauptprogramm gerade en el WaitInput steckt. Lo son en SetTimer-API-Función nämlich el Möglichkeit, una Callback-Rutina einzubinden. Und así es sicher auch, como cierto Tests zeigen. Denn el es natürlich kein echtes Multithreading, pero während el Abarbeitung el Temporizador-Routinen es el Hauptprogramm blockiert. Se puede also no wirklich behaupten, dass lo prozessortechnisch no belastet sería. Trotzdem ir así muy interessante Dinge, el ablaufen puede, während el Hauptprogramm en Eingaben wartet.

Yo habe el interessehalber veces nachgebaut:
 $H windows.ph
Declarar _aProc%,_aProc2%,_hTimer%,_hTimer2%,_hTimer3%,_hT%,_hT2%,_Count%,_Count2%,_Ende%

PROC TimerProc

    'unnamedParam3&=Timer-Handle, así puede ser zwischen el individual Timern unterscheiden (el Parameterbezeichnung stammt de Microsoft, nähere Erläuterungen hay dazu en el MSDN no)
    'Achtung: Während el Abarbeitung uno TimerProc-Aufrufes se ejecuta el Hauptprogramm no más! Lo es lo eben no en echtes Multithreading. Daher sólo kurze Codes uso.
    Parámetros unnamedParam1&,unnamedParam2&,unnamedParam3&,unnamedParam4&

    If unnamedParam3&=_hTimer%

        Imprimir "Timer 1 aufgerufen"

    ElseIf unnamedParam3&=_hTimer2%

        Imprimir "Timer 2 aufgerufen"

    EndIf

ENDPROC'TimerProc

PROC DoSomethingFast

    Parámetros unnamedParam1&,unnamedParam2&,unnamedParam3&,unnamedParam4&
    Inc _Count%
    SetText _hT2%,"Timer 3: "+@Str$(_Count%)

ENDPROC'DoSomethingFast

Cls
Imprimir "Programmende con Escape"
Imprimir
_hT%=@Crear("TEXT",%Hwnd,"Hauptprogramm: 0",250,10,160,20)
_hT2%=@Crear("TEXT",%Hwnd,"Timer 3: 0",250,35,160,20)
_aProc%=@ProcAddr("TimerProc",4)'Funktionsadresse el TimerProc ermitteln
_aProc2%=@ProcAddr("DoSomethingFast",4)
'Temporizador 1 erzeugen
'Parámetro 1 & 2 necesario 0 ser, 3 Es el Wartezeit a para nächsten Aufruf en Millisekunden, 4 Es el Adresse el TimerProc.
'Achtung: El Aufrufzeit darf se no con uno vorhergehenden Bearbeitung el TimerProc überschneiden, ellos muss also lang genug gewählt ser, sodass el TimerProc antes el nächsten Aufruf fertig se!
'Se puede natürlich para verschiedene Temporizador diferente Procs uso, solange lo freie @ProcAddr-Plätze son. Dann es el Überschneidungsproblem no bastante así groß.
'Außerdem podría uno beim Einsatz de JRPC3 schnelle native Procs uso, el kein echtes Zeitproblem erzeugen. Dies sería auch el Beschränkung el freien @ProcAddr-Plätze beseitigen.
_hTimer%=~SetTimer(0,0,1000,_aProc%)
'warten, así lo una fühlbaren Zeitunterschied en el Aufrufen el Temporizador son
Sleep 300
'Temporizador 2 erzeugen
_hTimer2%=~SetTimer(0,0,1000,_aProc%)
'Temporizador 3 erzeugen (más rápido Aufruf)
'El zeitliche Auflösung des Windows-Timers es ca. 16ms; 10 garantiert por lo tanto el schnellstmöglichen Aufruf des Timers.
'Pero esto es siempre todavía muy langsam en el Vergleich a echtem Multithreading, como así máximo bien 60 Aufrufe pro Sekunde posible son - para viele interessante Dinge dürfte el trotzdem ausreichen.
_hTimer3%=~SetTimer(0,0,10,_aProc2%)
Mensajes del usuario $10'Programmende
_Ende%=0

Sinestar encargado _Ende%

    'El Temporizador laufen unabhängig y voluntad de Windows auch während des WaitInputs aufgerufen, ellos son also unabhängig de el Haupteingabeschleife des Hauptprogramms.
    'Während Sleep voluntad el Temporizador allerdings no abgearbeitet, el wirkt offenbar Profano-Programa-weit.
    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

Um mi These a ocupar, dass el Hauptprogramm por el TimerProc blockiert se, puede ser simplemente veces una largo Bucle (for i%,0,100000) en esta einbauen. Während ellos abgearbeitet se, se el Hauptprogramm-Zähler no aktualisiert. Es en Nutzung el 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

Falls uno el Hilos en verschiedenen Prozessorkernen uno zB Quadcores para Laufen bringen kann, debería doch una Performance-Gewinn a erreichen ser. Windows läßt meines WIssens entsprechende Programmbefehle sólo como "Empfehlungen" a, el Sache es de allen otro konkurrierenden Prozessen en el Sistema abhängig. (Mit Vorbehalt: Mein Hirn es en letzter Tiempo como por desgracia, no muy 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
Das son tan no echten Treads. Deshalb laufen ellos siempre en el Kern, el el XProfan-Programa zugewiesen es. Das XProfan-Programa verzweigt sozusagen a TimerProc, si la Temporizador dies auslöst. Trotzdem finde Yo el echt "cool", si yo el una vez así sagen darf. Auf qué no siempre otra vez stößt, si uno el Ideen el alten Grandseigneurs unserer grandiosen Lingua 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 Gegensatz dazu voluntad echte Hilos tatsächlich automáticamente en allen Kernen ausgeführt, si al no künstlich verhindert. Ein Ejemplo es mein Apfelmännchenprogramm en el JRPC3-Teil dieses Forums. Dafür braucht uno aber Code, el multithreadingfähig es - el va en XProfan no sin Hilfsmittel, pero dafür benötigt uno z.B. FreeBasic oder PureBasic (Usted weißt ya, fbProcs y pbProcs en 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


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

1.544 Views

Untitledvor 0 min.
Sven Bader22.11.2023
ByteAttack27.10.2023
Uwe ''Pascal'' Niemeier17.10.2023
HofK07.09.2023
Más...

Themeninformationen

Dieses Thema ha 2 subscriber:

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


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie