プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作 第4回 マルチスレッドとネットワーク. 今日の内容 マルチスレッド – ローディングの進捗表示とか – 処理高速化も見込めます ネットワーク通信 – 必然的にマルチスレッドを扱います.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4 2011/11/8 マルチスレッドと 真・ストリーミング再生.
TCP/IP によるチャットプログラ ム 薄井 秀晃. 基礎知識編 TCP/IP とは? IP とは・・・ Internet Protocol の略称であり通信方法の技術的なルールで あり、実際にデータを送受信する前にデータを小さなデータ に分割し、それに発信元と受信先の IP アドレスを付加させて.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
Generic programming と STL
ML 演習 第 8 回 2007/07/17 飯塚 大輔, 後藤 哲志, 前田 俊行
応用情報処理V(2002) もっとプログラミングをしたい人のために
伺か with なでしこ 発表者:しらたま /05/05 うかべん大阪#3.
インターネットにおける オーケストラ演奏同期機構の 設計と実装
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
卒研:データベースチーム 第4回 DOMを使った処理
小型デバイスからのデータアクセス 情報処理系論 第5回.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
プロジェクト演習Ⅱ インタラクティブゲーム制作
HTTPプロトコルとJSP (1) データベース論 第3回.
社会人学習講座 「Javaプログラミング概論」
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
インタラクティブ・ゲーム制作 <プログラミングコース>
Day3 Day4 Day3 Day4.
情報学部 プログラミング体験教室 (中級編)
オペレーティングシステムとは オペレーティングシステム 第3回.
RMI ソフトウェア特論 第6回 /
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
Handel-Cを用いた ちょっとレトロ な 「よけゲー」 の設計
2003年度 データベース論 安藤 友晴.
迷宮師 コードレビュー チームカテキン.
オペレーティングシステムJ/K (実時間処理システム)
P2P方式によるオンラインゲームの研究、開発
C言語でスレッド (Pthread) 2007年1月11日 海谷 治彦.
ソケットプログラム(TCP,UDP) EasyChat開発
マルチスレッド処理 マルチプロセス処理について
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
ゲーム開発モデルの基礎.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
インタラクティブ・ゲーム制作 プログラミングコース 補足資料
プロジェクト演習Ⅱ インタラクティブゲーム制作
サーバ・クライアントシステム ( X Window System) 2006/01/20 伊藤 和也 original: 前坂たけし
応用情報処理V(2001) もっとプログラミングをしたい人のために
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4
岩澤全規 理化学研究所 計算科学研究機構 粒子系シミュレータ研究チーム 2015年7月22日 AICS/FOCUS共催 FDPS講習会
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
Javaによる Webアプリケーション入門 第8回
「マイグレーションを支援する分散集合オブジェクト」
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
卒業研究 JCSPを用いたプログラム開発  池部理奈.
理工学部情報学科 情報論理工学研究室 延山 周平
精密工学科プログラミング基礎 第7回資料 (11/27実施)
MPIを用いた並列処理計算 情報論理工学研究室 金久 英之
SMP/マルチコアに対応した 型付きアセンブリ言語
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
MPIを用いた 並列処理 情報論理工学研究室 06‐1‐037‐0246 杉所 拓也.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
ソケットの拡張によるJava用分散ミドルウエアの高信頼化
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作 第4回 マルチスレッドとネットワーク

今日の内容 マルチスレッド – ローディングの進捗表示とか – 処理高速化も見込めます ネットワーク通信 – 必然的にマルチスレッドを扱います

マルチスレッドとは 1つのプログラムの中で複数の関数が 同時に(並列して)動かせる技術のこと – 今まで皆さんが書いていたプログラムは 「実行している箇所」は1カ所だけだった シングルスレッド マルチスレッドの導入により、メイン ループを回しつつ、他のスレッドで重い 処理をさせることができるようになる

メリット・デメリット 重い処理をメイン ループから外して処 理の高速化、効率化 が見込める – バックグラウンド読み 込み、ローディングの 進捗表示、ネットワー ク処理、BGMのスト リーミング再生など夢 は広がるばかり データのアクセスに 制約が付く バグった時の対応難 度が跳ね上がる 苦労して別スレッド にしてもその割には リターンが少ない、 あるいは悪化するこ ともある

今回のサンプルは(も) Windows限定コード boostというライブラリを使うと、 機種依存せずにスレッド処理が可能 ただし、ライブラリのサイズが膨大かつ、 コンパイル速度が低下するなどの影響も boostはおすすめしたいのですが、 今回は学習の利便性をとって Windowsネイティブの実装にしました

使い方 Javaライクにしてあります – 基底クラスを継承してMyThreadクラスを 作る – Main()をオーバーライドして、別スレッドで 行う処理を実装する – MyThreadオブジェクトを作り、 Start()をコール Main()を直接コールしてはだめ – 止める時はEnd()をコール

別スレッドで操作している データの参照 必ず受け渡し用のメンバ関数を作る そのメンバ関数内でLock()~Unlock()を 忘れずにコールする – Lock()して – 返値用の変数にデータをコピーしたりして – Unlock()する これを怠ると、データの読み書きが かちあってSUGOIことになる

ネットワーク処理を扱う 開発環境 XNA – 何か規約とかが面倒らしい DirectPlay – 滅びる定めのフレームワーク boost::asio – 機種非依存で、将来はC++標準になるかも – でもboostなので… winsock – Windowsネイティブ実装 – でもAPI構成はUNIXの系譜を受け継いでいて そこそこきれい(他機種への移植も容易)

ネットワークには マルチスレッドが必須 通信待ち状態で処理が止まる メインループに組み込もうもんなら ゲームになりようがない サーバー – 接続してくるクライアントごとにスレッドを 立てる クライアント – サーバーとの接続用に1本立てる

今回のサンプル POEを開発した時のテストプロジェクト – コマンドバッファによるアクションゲームに 対応した設計例となっている – 60FPSのアクションゲームに対応できるので だいたいのゲームに応用できるはず

考え方 クライアント: – サーバーにキー入力情報を送る サーバー: – 各クライアントからと、自分自身のキー入力情報を集め、 あるフレームにおける全プレイヤーのキー入力状態の セットを作る – サーバー上で1セットの状態に基づいてゲーム状態を再現 しつつ、各クライアントに1セット分のデータを送る クライアント: – 受け取った1セット分のデータを数フレーム分プール (コマンドバッファリング)しておく – ある程度貯まったら1フレームずつ取り出して状態再現を 行う

特徴 来たデータを片っ端から再現してしまう と、通信遅延が起きた時のガタ付きがひ どくなる – 5フレーム程度ため込んでおくことで、 多少の通信速度のムラは吸収できる – あまりためすぎると、操作に対する反応の 遅延が大きくなってストレスがたまる

コマンドの送り方 固定長のテキストでキーワードを送る その後でキーワードに即したデータ送信 キー操作以外にもチャットメッセージを 送ったりもできる コマンドだけだと何かのタイミングで 取りこぼしがあると致命傷なので、 一定のタイミングで現在の状態そのもの を送信