| |
|
|
Jac de Lad | Hallo,
ich finde die Thread.pcu klasse. Aber gibt es eine Möglichkeit mehr als 4 Threads gleichzeitig zu benutzen? Das bräuchte ich unbedingt!!!
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 25.10.2005 ▲ |
|
|
|
|
Frank Abbing | Ich glaube, dass Profan diese Grenze setzt. Bin aber nicht ganz sicher... |
|
|
| |
|
|
|
| Jain. Die Thread.Pcu tut nur so als ob es Threating wäre. Sonst gäbs ne Menge Nachteile. Mit der Thread.Pcu gibts aber nur 4 Stränge - da lässt sich auch nix regeln.
Echte Threads jedoch kann Du soviele erzeugen wie Dein System erlaubt.
Nur sage mir bitte - wofür mehr als 4? |
|
|
| |
|
|
|
Jac de Lad | Hallöle,
ich möchte ein Spiel programmieren und benötige mehrere Threads, um die Musik, Geräusche, Cursor etc zu steuern. Da brauche ich mehr als 4 Threads...
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 26.10.2005 ▲ |
|
|
|
|
Frank Abbing | Hi,
in der Regel verringert jeder weitere Thread die Geschwindigkeit des Hauptprogramms... |
|
|
| |
|
|
|
| @Frank: Richtig.
@Jac: Musik, Geräusche => ein thread Cursor etc zu steuern => Über einen Keyboardhook - also kein Thread.
Selbst Doom kommt mit 4 Threads aus - benötigt aba 6 im Multiplayermodus.
Deshalb sage ich einfach die von Dir gewählte Herangehensweise ist zu überdenken.
Ich kann die Anzahl auch nicht erhöhen - so gern ichs tuen würde.
Salve. |
|
|
| |
|
|
|
Jac de Lad | Hmmm...
erstmal ne Frage: Was ist ein Hook?
Und wie, wenn ich mal fragen darf, funktioniert die thread.pcu eigentlich intern? Ich habe momentan gar keine Vorstellung davon...
Ich überdenke das mit meinem Spiel nochmal, und wenn es irgendwann mal Gestalt annimmt seid ihr die ersten, die es zu Gesicht bekommen!
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 28.10.2005 ▲ |
|
|
|
|
| Die Thread.Pcu ist ein relativ komplexes Gebilde auf Grundlage der Timer-APIs. Hier werden Prozeduradressen an Apis übergeben - und gleichzeit wird aufgepasst das nix überläuft (prozedurstack). Eigendlich lächerlich - aber in seiner aktuellen Form durch seine einfache Anwendungsmöglichkeit unheimlich hilfreich.
Was hooks sind: [...]
Hier ein kleines Sample: KompilierenMarkierenSeparieren {$Cleq}
Set("FastMode",1)
Def Cnhex(4) !"user32","CallNextHookEx"
Def Swhex(4) !"user32","SetWindowsHookExA"
Def Gwtpid(2) !"user32","GetWindowThreadProcessId"
Declare Hkbdhook&
cls
Hkbdhook& = Swhex(2,Procaddr(Kbproc, 3), 0,Gwtpid(%hwnd, 0))
while 1
getmessage
wend
End
Proc Kbproc
Parameters Ncode&, Wparam&, Lparam&
Declare Bval&
If Wparam& = 13
If Lparam& < 0
Endif
Bval&:=1
Elseif Wparam& ==40 down
If Lparam& > 0
Endif
Bval&:=1
Elseif Wparam& ==38 up
If Lparam& > 0
Endif
Bval&:=1
Elseif Wparam& = 222Ä
If Lparam& < 0
Endif
Bval& = 1
Elseif Wparam& = 192Ö
If Lparam& < 0
Endif
Bval& = 1
Elseif Wparam& = 186Ü
If Lparam& < 0
Endif
Bval& = 1
Elseif Wparam& = 219ß
If Lparam& < 0
Endif
Bval& = 1
Else
Cnhex(Hkbdhook&, Ncode&, Wparam&, Lparam&)
Bval& = 0
Endif
Return Bval&
Endproc
Salve, iF |
|
|
| |
|
|
|
Jac de Lad | Aha...hm, aber wie ist es möglich gleichzeitig eine Musik zu spielen, Hintergrundgeräusche einzumischen, einen animierten Mauscursor bewegen zu lassen, Wasser zu animieren...? Irgendwie hab ich da noch n Denkhänger...
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 28.10.2005 ▲ |
|
|
|
|
| [quote:a113f08e31=Jacob Liebeck]Aha...hm, aber wie ist es möglich gleichzeitig eine Musik zu spielen, Hintergrundgeräusche einzumischen, einen animierten Mauscursor bewegen zu lassen, Wasser zu animieren...? Irgendwie hab ich da noch n Denkhänger...
Jac[/quote:a113f08e31]Dafür gibt es API und DirectX-Funktionen. Jedenfalls für Musik.. Oder die ProSpeed.dll. Für den Rest stehen Dir bis zu 16 Timer zur Verfügung, wobei Highrestimer in Spielen vorzuziehen sind. Auch da hilft Dir die API weiter. |
|
|
| |
|
|
|
Jac de Lad | Wie kann ich denn 16 Timer verwenden??? |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 29.10.2005 ▲ |
|
|
|
|
| [quote:ac5601579e=Jacob Liebeck]Wie kann ich denn 16 Timer verwenden???[/quote:ac5601579e] siehe: [...] Für die Timer kannste ~wm_timer auswerten, oder eine TimerProc übergeben, wobei dies allerdings XProfan erfordert. Für ~wm_timer empfiehlt sich natürlich auch ein Callback. PS: Für API-Timer ist ein Fenster erforderlich, das aber nicht unbedingt sichtbar sein muß
Simples sinnloses Beispiel für 2 Timer: KompilierenMarkierenSeparierenDef W32settimer(4) !"USER32.DLL", "SetTimer"
Def W32killtimer(2) !"USER32.DLL", "KillTimer"
Proc Mytimer1
Print "Timer 1"
Endproc
Proc Mytimer2
Print "Timer 2"
Endproc
Cls
W32settimer(%Hwnd, 0, 500, Procaddr("MyTimer1", 0))
W32settimer(%Hwnd, 1, 5050, Procaddr("MyTimer2", 0))
Waitinput
W32killtimer(%Hwnd, 0)
W32killtimer(%Hwnd, 1)
Viel Spaß
//Edit: Hab den Code nochmal korrigiert |
|
|
| |
|
|