クラスメソッドの並列処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nayo

クラスメソッドの並列処理について

#1

投稿記事 by nayo » 16年前

こんにちは、お久しぶりです
今回は麻雀ゲームを作成しているのですがちょっと困った壁にぶつかってしまいました

CPの思考は並列処理にしたいと考えているのですがエラーが出てしまいました
プログラムは大雑把にこんな感じです
class CPlayer
{
protected:
	DWORD  m_thID;
	HANDLE m_hTh;
	unsigned __stdcall cpRoutine(void *);
public:
	void tumo();
};
スレッドの呼び出しはtumoメソッドでCPの場合

m_hTh = (HANDLE)_beginthreadex( NULL, 0, CPlayer::cpRoutine, NULL, 0, (unsigned *)&m_thID );

といった感じで呼び出そうとしています

エラーの内容は

error C3867: 'CPlayer::cpRoutine': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&CPlayer::cpRoutine' を使用してください

といったものです
そこでエラーのメッセージ通り&CPlayer::cpRoutineに変更すると

error C2664: '_beginthreadex' : 3 番目の引数を 'unsigned int (__stdcall CPlayer::* )(void *)' から 'unsigned int (__stdcall *)(void *)' に変換できません。(新しい機能 ; ヘルプを参照)

といったエラーメッセージが出てきます

そもそもクラスメソッドを並列処理することはできないのでしょうか
せっかくの休みですがどなたか回答お願いします

書き忘れていましたが環境はVisual C++ 2008 Express Editionです

Justy

Re:クラスメソッドの並列処理について

#2

投稿記事 by Justy » 16年前


>そもそもクラスメソッドを並列処理することはできないのでしょうか

 直接 beginthreadexで非staticなメンバ関数を指定することは出来ません。

 下記のページを参考にしてみて下さい。

staticでないクラスメンバ関数を_beginthreadで実行させる方法。 - かせいさんとこ
ttp://d.hatena.ne.jp/kasei_san/20070612/p1

nayo

Re:クラスメソッドの並列処理について

#3

投稿記事 by nayo » 16年前

Justyさんありがとうございます
なるほど非スタティックなメンバ関数を指定することはできなかったのですね
staticにすることで解決できました
紹介していただいたページも非常に参考になりました
また質問したときは宜しくお願いします

閉鎖

“C言語何でも質問掲示板” へ戻る