R
mad_martin schrieb:
rapso schrieb:
mach es doch gleich nur mit einem thread, das OS wird dann die aufgabe auf alle cores recht gleichmaessig verteilen und du hast was du wolltest.
Bist du dir da ganz sicher? Zumindest bei Windows kann man erkennen, dass es bei Ein-Thread-Programmen eben keine Lastverteilung gibt. Oder meintest du das anders und ich verstehs nur so früh noch nicht?
wenn du nur einen thread hast, aber 4 cores, bekommt jeder core in etwa 25% vom thread. versucht eigentlich jedes OS. auf die schnelle konnte ich das hier fuer dich ergooglen von winrar: http://f0dder.reteam.org/gfx/dualcore_winrar.png
auf einem core laeuft so ein programm natuerlich unter 100% last, wenn nichts anderes zu tun ist, aber das verhalten ist eigentlich das gewollte. sobald es andere aufgaben gibt, wird das OS sie 'fair' verteilen. selbst 'sleep' aufzurufen um in die taskverteilung eines OS einzugreifen hat eigentlich kaum sinn. sleep funktioniert deswegen auch nicht auf ms basis, sondern hat die granularitaet von den "time-slieces" vom Sheduler vom OS, (das gilt fuer windows ) also ca 10-15ms. das hat im endeffekt die wirkung dass man keine stabilen 60fps hat, sondern mal 4frames am stueck und dann steht das ganze.
Sleep wuerde ich also so ziemlich nie verwenden. entweder
- den thread die ganze zeit laufen lassen
oder (und ich glaube das hat der threadstarter eigentlich gewollt)
- mit z.b. waitforsingleobject+events bzw. Conditions+signals die threads schlafen lassen wenn sie nichts zu tun haben und dann bei gebrauch aufwecken.
naja, ist nur meine meinung