PCで描画と内部処理の非同期処理ってどうやんの?
■ このスレッドは過去ログ倉庫に格納されています
0001(;´д⊂ヽ
02/04/29 16:14ID:Gsu.P7Dk実装したいんですが、具体的に、どういう風な構造にすればいいのか全然わかりません助けて
キー入力とかタイミングに厳しい処理を別スレッドで回すとして
描画担当スレッドはどーすればいいんでしょう?
(描画途中で別スレッドにより内部変数が書き換えられるケースが出てきますよね?)
0056名前は開発中のものです。
02/05/04 12:02ID:???たいした問題じゃない。
0057名前は開発中のものです。
02/05/04 16:15ID:???排他制御しないぶん楽。
0058名前は開発中のものです。
02/05/04 19:49ID:???0059名前は開発中のものです。
02/05/04 20:29ID:DoQwTAVw車ゲーのリプレイは適当でいいけど
まぁ、最低60回は回すように組んでおくとして、数値微分なんかの
凾狽ェ小さすぎて問題になることなんてあるだろうか?
0060名前は開発中のものです。
02/05/04 20:53ID:???0061名前は開発中のものです。
02/05/04 23:03ID:???0062名前は開発中のものです。
02/05/05 00:10ID:PKpkIeKE普通の関数バージョンに比べて遅くなった。
つーかフレームのコールにPostMessage使ってるし当然か。
なんだか設計思想が間違ってたようで激しく鬱。
0063名前は開発中のものです。
02/05/05 00:42ID:???PostMessageはまずいでしょ…ガタガタになっちゃう。
ま、誰しも一度は通る失敗だけどね。
0064名前は開発中のものです。
02/05/05 01:07ID:PKpkIeKEでもさ、それ以外思い浮かばんのよね。
それ以外だと、メッセージループに
if( pFPS30->BeCalled() ){
RenderMain();
}
を埋め込む以外なくなる。
0065名前は開発中のものです。
02/05/05 02:14ID:QlZCUdc20066名前は開発中のものです。
02/05/05 02:29ID:???PostMessage(arg->hWnd, WM_PAINT, 0, 0)を
選ぶ62たんはWindowsプログラマの鏡!
006762
02/05/05 03:42ID:yqpWzWOEFPS用のスレッドでパフォーマンスタイマーの
ビジーループをぐるぐる回して処理している為
たとえ内部処理、描画処理を1FPSに設定しても
CPU占有率が100%になってしまう。
何かスマートな実装方法は無いかえ?
0068名前は開発中のものです。
02/05/05 03:59ID:???0069名前は開発中のものです。
02/05/05 04:06ID:yqpWzWOESleep系とパフォーマンスタイマーの併用ってこと?
パフォーマンスタイマーから大まかなSleep時間を
求めて眠らすとか?
それとも精度には不安があるがSleep系のみで管理とか?
ビジーループを使わず、タイマーを使う良い方法が
あったら教えて欲しい。
0070名前は開発中のものです。
02/05/05 04:29ID:XpophaTo007169
02/05/05 05:40ID:CUy74S1o>求めて眠らすとか?
MsgWaitForMultipleObjectsを使ってこの案を実践したら
60FPSでCPU使用率100%だったのが0%まで落とす事に成功しました。
なんだか上手くいき過ぎて怖い。^^
でも試して上手くいった時は快感!だったりする。
>>70
60FPSの場合、精度は16msec程度必要。
まあSleep系は悪くても誤差10msecらしいから
一応大丈夫といえばそうらしい。
0072名前は開発中のものです。
02/05/05 10:34ID:???Windowsで、他にプログラムを走らせない状況を作るのは不可能。
0073名前は開発中のものです。
02/05/05 11:42ID:???0074名前は開発中のものです。
02/05/05 11:50ID:???やっぱり描画とその他って分けるべき?
0075名前は開発中のものです。
02/05/05 13:39ID:???ちなみに描画と内部処理を同期させてるゲームの場合、壁にぶつかる瞬間にわざと
負荷をかけてフレームレートを落とすと壁をすり抜けたりする。
かつて、リアルタイムで解像度が切り換えられるゲームがあったけど、解像度切り
換えで1秒くらい時間が飛ぶから、それで壁を突き抜けたりミサイルをすり抜けた
りなんてことができたよ。
0076名前は開発中のものです。
02/05/05 14:02ID:???えー、それはつくりがヘボイだけでは。
0077名前は開発中のものです。
02/05/05 14:05ID:???冲 が 3.25なら、 1, 1, 1, 0.25でループ回す
0078名前は開発中のものです。
02/05/05 14:06ID:???前回と今回の座標でレイとばせ。
007969
02/05/05 16:00ID:Qufy7xrsいや別ける必要はないと思う。
俺の場合、ビジーループのCPU負荷を下げたいと
模作した結果、こんな形になってしまったが
メリットは無かった。
>>71のMsgWaitForMultipleObjectsを
メインメッセージプロシャージャーに組み込む方法をとるか
FPS制御クラスにSleep系を組み込むようにする設計にすれば
スレッドを作らなくても同じことが出来るはず。
008069
02/05/05 16:02ID:Qufy7xrs>>79は撤回。やっぱスレッドは必要かも。
008169
02/05/05 16:08ID:Qufy7xrs>>1その他の方向性は、CPUパワーに余裕がある場合FPSを増やす可変方式なのに対し
俺の場合、安定したFPSでCPUパワーに余裕がある場合眠らせるって形だからなぁ。
やねおうら氏のスーパープログラマーへの道にも、Sleepを用いたFPS制御を話題に挙げていた回があったが
あれは、プライマリとは別にゲーム用メインスレッドを作っているから可能な方法だな。
0082名前は開発中のものです。
02/05/05 17:10ID:???0083名前は開発中のものです。
02/05/05 22:52ID:???ネットゲームは通信速度が一定じゃないからfps固定はできないんじゃ?
0084名前は開発中のものです。
02/05/06 01:34ID:???「固定」の意味もイマイチ不明だけど、「通信速度が一定じゃないから」ってのも違う気がする
0085名前は開発中のものです。
02/05/06 01:42ID:???なんていうヘタレな実装をしている市販3Dゲーが思いつかないが。
0087名前は開発中のものです。
02/05/06 03:06ID:???通信速度は関係ないと思うが、
ゲームの性質上FPS固定ってのはありえんと思う。
画面上に人がイパーイでたりするからね。
0088名前は開発中のものです。
02/05/06 07:01ID:???結局やることはFPS非固定と対して代わらないような。
0089名前は開発中のものです。
02/05/06 07:02ID:???固定にするくらい出ないとだめか。
0090名前は開発中のものです。
02/05/06 16:25ID:???DIABLOとかやったことないの?
魔法使いまくるとフレームレート落ちるよ。
0091名前は開発中のものです。
02/05/06 16:48ID:???DIABLOやったことないので質問するが、それは描画処理が増大して
モタついてるということではないのか。
例えば、FPS系のメジャー所では通信速度はフレームレートに
影響しない。Lagの激しい奴はパケットロスということで
前フレームの移動パラメータを使って補間アニメーションする。
009291
02/05/06 18:17ID:???First Person Shooting系 と読み替えてくれ。
0093名前は開発中のものです。
02/05/06 19:45ID:???普通に作っちゃうとローカルプレイ版が先にできちゃって
後から通信対応させるのにスゲエ苦労して一ヶ月泊り込んじゃったよ
っていう人いますか
0094名前は開発中のものです。
02/05/06 21:46ID:???ネットゲーは毎フレームデータのやり取りしてると思ってるのかな?
Doomならそうだったけど、今はそんなことしてるゲームは少ないよ。
元々アーケード用に作ったゲームを移植のついでにネットワーク対戦に
対応させるときはやったりするけど(某DC用のゲームとか)
009569
02/05/06 23:05ID:5hxqOZmsDirect3Dを使ったプログラムで、>>71で作った
スレッドを用いたFPSのクラスを使うと
モーダルダイアログを呼んだ瞬間に(::DialogBoxIndirectParam)
固まってしまう。
モーダルダイアログは親ウインドウと同じスレッドです。
FPSのスレッドをサスペンドにすると固まる、
スレッドを終らせてからダイアログを呼ぶと固まらない、
デバック出力用APIを1行加えると固まらない、
FPSクラスのフレームの呼び出しがメッセージだと固まる、
FPSクラスのフレームの呼び出しをファンクションコールにすると固まらない、
D3Dで描画しないと固まらない、
これって何が原因だかわかります?
0096名前は開発中のものです。
02/05/06 23:18ID:???スキン対応も簡単だからいいだろ。
0097名前は開発中のものです。
02/05/06 23:20ID:???0098名前は開発中のものです。
02/05/07 02:41ID:???それは、Win32とかマルチスレッドプログラミングの参考書を
一冊手に入れて目を通したほうがいいような気もする。
0099名前は開発中のものです。
02/05/07 07:05ID:???んなの聞いたことない。
ぼんミスでバグってるだけだろ。
0100名前は開発中のものです。
02/05/07 10:10ID:???010169
02/05/07 11:13ID:H21ddL0QFPSのスレッドがしていることは、
一定時間Sleepして::PostMessageでユーザー定義メッセージを
ウインドウに送っているだけです。
それ以外、変数を操作したりWindowsのシステムにアクセスしたりとかは
何もしていません。
Window、Direct3D、その他もろもろは同一スレッドなんで
実質シングルスレッドと殆ど変わりません。
キーを押された→WM_KEYDOWNメッセージハンドラで、
FPSスレッド停止しダイアログ呼び出し、こんな感じです。
このFPSスレッド停止をSuspendにするとダメ、DestroyにするとOKなんですよね。
まあダイアログをモードレスして作り直してどうなるか試してみます。
0102名前は開発中のものです。
02/05/07 21:10ID:???まぁ内心では気付いてるだろうと思うが、
そういうあいまいな文章による状況説明では他人に問題点を指摘してもらうのは難しい。
(orバグを作った本人の状況分析だけを頼りに問題点を見つけ出すのは難しい)
ソース見せられるなら添削してもらうこともできるだろうが
それが無理なら「頑張ってね」としか言えんよ、実際。
とりあえずDirectXとか余計なものから一つ一つ外してみたらどうか。
010369
02/05/08 01:33ID:LDZ.FZgIその通りですね。
なんだかすいません。
0104処理安定
02/05/09 02:02ID:???ブロッキングに悩むからだと思うんだけど、ちょっとだまされたと思って
以下の設定してみてください。
「マイコンピュータ」->「プロパティ」->「デバイスマネージャ」->「ディスクドライブ」の設定で
オプションに DMA という項目があります。
Windowsの出荷状態では、ここはOFFなのですが、これをONにしてWindowsを
再起動してみてください。謎のブロッキングがかなり解消されますよ!
仮に解消されなくてもファイルアクセスなどがぐんと速くなるので損することは
ないと思います。(ただ一部のハードではこのDMAは無効になってるかもです)
60FPS以上のゲームで「ガクン!」というのがなくなると思いますよ、お勧め。
じゃ、眠いので僕は寝ます。おやすみ〜
0105名前は開発中のものです。
02/05/09 04:21ID:???そんなこと自慢されてもなぁ。XPじゃ最初から有効にされてるし。
プロセスとスレッドの優先度を最大まで上げる方が効果あるよ。
絶対に苦情くるけど。
0106名前は開発中のものです。
02/05/09 14:16ID:???104のどこが自慢っぽく見えるのか、俺には不思議。
性格ゆがんでない?
0107名前は開発中のものです。
02/05/09 15:54ID:???普通やん.
別に画期的なネタでもないわ.
0108名前は開発中のものです。
02/05/09 16:24ID:???MSの公示では、普通じゃないだろ >>FD,HD-DMA
DMA無効になってるのが普通。
問題は、ドライバの設定を変えた時に再起動させること。
自分のマシンだけリブートすればいい問題ではないので。
有名なネタではあるが。
0109名前は開発中のものです。
02/05/09 18:44ID:???いちいちくだらねえことつっこむなよ。
>プロセスとスレッドの優先度を最大まで上げる方が効果あるよ。
これこそわかりきってることを自慢すんなよ。障学生が。
0110名前は開発中のものです。
02/05/09 19:14ID:???0111名前は開発中のものです。
02/05/09 19:51ID:???それって98/95あたりの話じゃ、、、
0112名前は開発中のものです。
02/05/09 20:44ID:???ガタ落ちゼロになった。
ちなみに俺の環境はWin98.
今までの苦労、水の泡。
なんでディフォルトでDMA-ONじゃないのだ?>>MS
というか、配布するソフトでも是非、DMA-ONの状態にしたいのだが、
アプリケーションからそれを操作する方法ってないのか?
0113名前は開発中のものです。
02/05/09 20:51ID:???マザボのチップセットと相まって、かなりヤバイことになってた。
だからデフォルトOFFなんだと思う。
Socket7の頃の話だけどね。
0114名前は開発中のものです。
02/05/09 21:24ID:V/9kUMisIDE ATA/ATAPIコントローラーの
プライマリIDEチャネルとセカンダリIDEチャネルで設定出来る。
0115名前は開発中のものです。
02/05/09 21:31ID:???DMAオフでガタつくゲームってのも、問題アリだと思うが。
0116名前は開発中のものです。
02/05/09 21:50ID:???CPUが高速なHDのデータコピーを汗かきながらI/Oへ書き込むので
全てのアプリで停止するのだよ。特に最近のHDは高速だから、
DMAなしではやってられない。
0.3秒くらいCPUがHDの転送に専念することもしばしば。
0117名前は開発中のものです。
02/05/09 22:01ID:???ゲーム中はHDへアクセスしないようにするべし。
0118名前は開発中のものです。
02/05/09 22:08ID:???ライトバックキャッシュのフラッシュや
ページアウトでアクセスが発生しちまいますな
0119名前は開発中のものです。
02/05/09 22:28ID:???そうゆう話じゃないと思われ。
他のゲームはガタつかないのに自分のゲームはガタつく!ってのが問題。
0120名前は開発中のものです。
02/05/10 04:19ID:???>他のゲームはガタつかないのに自分のゲームはガタつく
そんなこと誰か書いたっけ?
0121名前は開発中のものです。
02/05/10 06:45ID:???0122名前は開発中のものです。
02/05/10 19:29ID:???自分から行動を起こさなきゃ。
0123名前は開発中のものです。
02/05/11 04:24ID:???んー、学生さんかのぉ?
Windowsやlinuxなどのような高度なOSでは、
例えば malloc() などのヒープもアプリケーション実行開始直後は
物理メモリに存在しないことしばしばなのじゃよ。
new を呼んだ瞬間、物理メモリが存在しなかったら、そこでHDアクセス。
スタックがオーバーしたら、HDアクセス。
他のアプリが使用していたメモリをHDへ書き戻す作業であることが
ほとんどなのじゃがな。
ゲームなど連続描画がシビアな環境では
Windows上だとガタガタに見えてしまうのも、そこが原因だったりするんじゃ。
0124名前は開発中のものです。
02/05/11 15:53ID:???>Windows上だとガタガタに見えてしまうのも
見えませんが?
012569
02/05/11 17:18ID:HivZaZZAFPSを表示するのにFPSの抽出を60FPSとかにすると
更新が激しくて見づらいので、2FPS等で抽出させる
別のFPS制御クラスを作っていたんだけど、
ダイアログを表示する際にこいつは関係ないと思って
サスペンドしていなかった為に、デッドロックが起こっていたようです。
結果論であり、デッドロックの理由はわかりませんが。
::CreateWaitableTimerという便利そうなAPIを発見したんで
こりゃ使えると思ってFPS制御クラスに組み込んだら、
こいつしっかりCPU時間を消費しやがんの。
使えね〜、精度も低いしサ。
>>123
そういうことをやっているかどうかは知らんけど、
やっていたとしても、それは単に物理メモリが少ない場合の
回避処置でしか無いと思うんだけど。
そりゃメモリが足りなくてスワップしまくりな環境なら
ゲームもカクつくよ。
012699
02/05/11 17:22ID:.Lvp8gPk-------風俗の総合商社・MTTどこでも-------
〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
0127名前は開発中のものです。
02/05/12 08:31ID:???>回避処置でしか無いと思うんだけど。
WinXPだとか、物理メモリあっても初アクセスまではアプリ用にメモリをcommit
しないというのに、何を逝ってるのかな?
10秒後に初めてアクセスした変数がメモリにまだcommitされてないページだった
らHDアクセス決定じゃん。
0128名前は開発中のものです。
02/05/12 19:48ID:IYwn5BLgコミットされていないページ=スワップアウトされてHDに退避させられているページ
じゃないんじゃないの?
単に仮想メモリが物理メモリにマップされてないだけで。
MSDNでVirtualAllocのページ見てみ。
つーかイチイチメモリ確保の度にHDDアクセスする訳ないじゃん。
常識的にアホ仕様だろそれじゃ。
0129名前は開発中のものです。
02/05/12 20:43ID:???たとえば
http://pc.2ch.net/test/read.cgi/tech/1017072275/
0130名前は開発中のものです。
02/05/14 21:35ID:ru/D90z60131名前は開発中のものです。
02/05/19 11:18ID:ajzZw3lo>コミットされていないページ=スワップアウトされてHDに退避させられているページ じゃないんじゃないの?
↓
コミットされていないページ=まだ存在していないページ
>つーかイチイチメモリ確保の度にHDDアクセスする訳ないじゃん。
Windows はダーティなページを極力メモリに保持し続ける方針で設計されている為、
いざページをコミットしようとすると、すぐに使えるメモリが足りなくて、結果的にページアウトが発生してしまう。
当然未使用メモリがある場合は、 HD へのアクセスは無い。
0132名前は開発中のものです。
02/05/19 15:25ID:???0133名前は開発中のものです。
02/05/20 01:16ID:???まぁ言いたいことは分かるが
あまり騒ぐと自治厨氏ねとか不本意な罵りを浴びるぞ。
0134名前は開発中のものです。
02/06/01 20:55ID:???3、4レスのためだけに別スレに移動なんてしてたら、
話の一貫性がなくなってしまうだろう。
0135名前は開発中のものです。
02/06/02 11:58ID:???0136名前は開発中のものです。
02/06/03 11:14ID:???他人を蔑むだけのカキコって、技術レベルに関係なくなんかむかつく。
0137名前は開発中のものです。
02/07/22 05:33ID:???60FPS出るように作って、処理が遅れたら処理落ちすれば
いいだけなのでは、、、?
3Dのゲームなら30FPSくらいが普通でしょうか。
0138名前は開発中のものです。
02/07/24 05:29ID:???v' += v * dt みたいな感じかな…。
具体的な実現方法は何パターンかあると思います。
どっかのスレでそんな議論してたと思った。役に立たなくてスマソ
0139オマンコー&rlo;ー゚ホンィテ&lro;
02/10/26 08:35ID:???0140名前は開発中のものです。
02/11/01 08:50ID:???良スレっぽいものは強制的にageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ ∧_∧ age
(・∀・∩)(∩・∀・) age
(つ 丿 ( ⊂) age
( ヽノ ヽ/ ) age
し(_) (_)J
0141あぼーん
NGNG0142名前は開発中のものです。
02/11/28 05:24ID:EVnGiSza/_ |
/. \ ̄ ̄ ̄ ̄|
/ / ― ― |
| / (・) (・)|
||| (6 > |
| | | ┏━┓| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | | ┃д┃| < 正直、ageてすまん
|| | | | \ ┃ ┃/ \________
| || | |  ̄  ̄|
0143あぼーん
NGNG0144名前は開発中のものです。
02/11/28 07:20ID:Ib7kWWVj当たり判定なんかで絶対死ぬ。
面倒臭くて作ってられない。
よしんば自分は制御できても他の人はできないでしょ。
ネトゲはしかたないけど。
別に必要がないならフレーム飛ばしで対応が一番楽。
0145あぼーん
NGNG0146名前は開発中のものです。
02/11/29 00:07ID:MjrDrSuBピンボールゲームとかビリヤードとかだとそれじゃまずいんだけどさ。
0147名前は開発中のものです。
03/06/26 13:32ID:p0CgQeLa0148名前は開発中のものです。
03/06/26 13:49ID:+zxBVEy/時間軸で補間描画するのが主流っぽく見えた。
ただ、これもコンストレインツとかいろいろ面倒ごとが絡んできそうだけど。
0149名前は開発中のものです。
03/06/26 19:48ID:5GfwaFR5物理シュミレーションで
短い期間に衝突が起こりまくるとかかな?
でも固定フレームだとすり抜けが心配になるんだよね。
0150名前は開発中のものです。
03/06/27 06:02ID:rPLXqI2z0151名前は開発中のものです。
03/06/27 06:04ID:rPLXqI2z固定フレームレートでのすり抜けの問題は、非固定でも同じかと。
結局、補完して判定したり、繰り返し判定しないといけないのは変わらないのでは
0152名前は開発中のものです。
03/06/27 08:57ID:ixQrGkNZ独自のプリミティブ命令を描画スレッド(っていうかサーバ)に発行する形。
描画スレッドはプリミティブ命令をバッファリングして適当なタイミングで画面を構成する。
ワーカースレッドは発行したプリミティブ命令が正しく描画されたかは関与しないので、
ゲームループに描画サイクルが間に合わない場合はフレームがスキップされるし、
ゲームループが遅すぎる場合はコマ送りになる。
0153名前は開発中のものです。
03/06/28 02:00ID:aSb9r1M8http://plaza16.mbn.or.jp/~satchel/omanko_marumie/
美少女のワレメ…(*´∀`*)ハァハァ
美人お姉さんのオマ○コ…(*´Д`*)ハァハァ
0154名前は開発中のものです。
03/06/28 09:56ID:MijJhoN2だから固定フレームレートだろ?
0155名前は開発中のものです。
03/06/28 10:56ID:zsEm8tDY拾ったサンプルムービー集めたよ
■ このスレッドは過去ログ倉庫に格納されています