| |
|
|
Jörg Sellmeyer | Salut,
comment pourrait je une Zähler realisieren, qui quasi avec voller Geschwindigkeit zählt, au cours de mon Hauptprogramm im Waitinput sur une Eingabe wartet? avec folgendem kleinen Code steht qui Zähler. si je mais qui souris bewege rast il à l'attaque. cet Geschwindigkeit bräuchte je durable. Gibt es une Message, qui durable übermittelt wird? un Minuteur ist sur jeden le cas trop lente.
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 27.09.2011 ▲ |
|
|
|
|
Nico Madysa | dans XProfan X2 wäre cela wohl avec Multiprozessing trop lösen.
RGH
So serait etwa qui souvent gefragte Zeit dans qui Titelzeile gelöst volonté:
Ansonsten wären Threads une Solution. Habe avec XPSE et NProcs quelque chose hingezimmert bekommen, cela etwa cela fait, quoi tu veux:
{$cleq}
Cls
nproc Minuteur
parameters addr&
whilenot Long(addr&,0) < 0
Sleep(1)
Long addr&,0 = Long(addr&,0) + 1
SetText %hWnd,str$(Long(addr&,0))
si Long(addr&,0) >= 385
Long addr&,0 = 0
BitBlt(%hDC,0,0,4000,500,%hDC,0,0,WHITENESS)
endif
Wend
ExitThread(0)
ENDPROC
var id& = 0
var exit& = 0
declare count#
dim count#,4
CreateThread(0,0,ProcAddr(Minuteur,1),count#,0,Addr(id&))
Screen 4000,500
Tandis que 1
WaitInput
Titre de la fenêtre Str$(Long(count#,0))
Si IsKey($20)
DrawText Long(count#,0) * 10,40,"!"
ElseIf IsKey(27)
Long count#,0 = -10
Pause
EndIf
Wend
si GetExitCodeThread(id&,Addr(exit&)) = STILL_ACTIVE
whileloop 5
imprimer "Thread encore aktiv ..."
Sleep 100
casenot GetExitCodeThread(id&,Addr(exit&)) = STILL_ACTIVE : pause
Endwhile
cas GetExitCodeThread(id&,Addr(exit&)) = STILL_ACTIVE : TerminateThread(id&,0)
endif
Dispose count#
end
Bien sûr sommes quelques Dummejungenfehler drin, mais zumindest chez mir funktioniert es. ici qui Exe: Herunterladen externer Télécharger |
|
|
| |
|
|
|
| @Jörg: Windows zählt bereits toujours z.B. dans getTickCount ^ ^ -
si Du Dir alors zum la date X den getTickCount merkst ensuite peux toujours per Differenz ermittelt comment large ("im Hintergrund") gezählt wurde.
Jörg Sellmeyer (27.09.11)
cet Geschwindigkeit bräuchte je durable. Gibt es une Message, qui durable übermittelt wird?
Noe -
cela Programme wäre sonst aussi "immer" busy. ^ ^ |
|
|
| |
|
|
|
RGH | pourquoi pas avec einem eigenen Prozess:
Déclarer hFileMap&, Buffer#, Counter%
Faible Buffer#, 5' place pour un LongInt + 1 CLS-Flag
Proc Counter
' Eigener Prozess, daher ne...aucune globaler Variablenzugriff
Déclarer c_hFileMap&, c_Buffer#, c_Counter%
Faible c_Buffer#, 5' place pour un LongInt
c_hFileMap& = FileMap("Open", "Counter")
c_Counter% = 0
' Speicherdate existiert: à l'attaque allez's avec Zählen
Si c_hFileMap&
c_Buffer# = FileMap("Map", c_hFileMap&)
Long c_Buffer#, 0 = c_Counter%
Byte c_Buffer#, 4 = 0' CLS-Flag sur 0
Tandis que 1
Sleep 10' Pour Testzwecke zum besseren Nachvollziehen
Inc c_Counter%
Si c_Counter% = 385
c_Counter% = 1
Byte c_Buffer#, 4 = 1' CLS-Flag sur 1
EndIf
Long c_Buffer#, 0 = c_Counter%
Endwhile
Dispose c_Buffer#
FileMap("Close", c_hFileMap&)
D'autre
MessageBox("Speicherdatei konnte pas ouvert volonté!", "MAP-Hinweis", 48)
EndIf
ENDPROC
CLS
Screen 4000,500
counter% = 0
hFileMap& = Créer("FileMap", "Counter", 4)
Si hFileMap&
Buffer# = FileMap("Map", hFileMap&)
D'autre
MessageBox("Speicherdatei konnte pas erstellt volonté!", "Hinweis", 48)
EndIf
' Speicherdatei ist vorbereitet: qui Prozess Conter peux gestartet volonté
var hCounter& = PExec("|Counter")
Tandis que 1
WaitInput
Counter% = Long(Buffer#, 0)
Si Byte(Buffer#, 4 = 1)
CLS
Byte Buffer#, 4 = 0' CLS-Flag zurücksetzen
EndIf
Titre de la fenêtre Str$(Counter%)
Si IsKey($20)
DrawText Counter% * 10,40,"!"
ElseIf IsKey(27)
Pause
EndIf
Endwhile
' Conter-Prozess finissons!
process("kill", hCounter&, 0)
Dispose Buffer#
FileMap("Close", hFileMap&)
Fin
Salut Roland
EDIT: là était quelqu'un plus rapide, si aussi quelque chose anders ... |
|
|
| XProfan X2Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 27.09.2011 ▲ |
|
|
|
|
| RGH (27.09.11)
pourquoi pas avec einem eigenen Prozess:
qui initialisation ist malheureusement très Systemlastig! |
|
|
| |
|
|
|
Nico Madysa | RGH (27.09.11)
pourquoi pas avec einem eigenen Prozess:
Weil je là qui Adressen pas so simple hätte transfert peut. j'ai den Code seulement fix avant dem déjeuner hingepinselt et voulais mich pas encore dans Filemaps einlesen. mais so, comment du's gemacht la hâte, geht's naturellement aussi. |
|
|
| |
|
|
|
Jörg Sellmeyer | je hab's mir déjà gedacht. la fois schaun, quoi sich là faire läßt. je hatte gehofft, cela ließe sich (Dank Wunderwaffe Subclassing) dans einem Programme erledigen. merci pour qui Anregungen et Codes! |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 28.09.2011 ▲ |
|
|
|
|
| comment wäre es avec Opcode à qui createThread-API transfert sodass Du à einer Speicherstelle toujours une Zählerwert la hâte? |
|
|
| |
|
|
|
Jörg Sellmeyer | cela sagt mir nix |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 28.09.2011 ▲ |
|
|
|
|
| comment vite soll car gezählt volonté? je prends pas à cela Du avec 100% CPU-charge "zählen" vouloir weshalb je cela frage. je pourrait ensuite z.B. simple bisl nativen Opcode dans une Bereich écrivons et den per createThread zur Ausführung anweisen. |
|
|
| |
|
|
|
Jörg Sellmeyer | Ah oui. je crois, qui avec dem Zählen funktioniert so déjà. Im Moment nervt mich quelque chose Anderes. S'inscrire mich wieder. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 29.09.2011 ▲ |
|
|
|