プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。

現在WINDOWSプログラムでゲームを最中なのですが、スレッド内でスレッドを作成できなくて困っています。
キャラを動かすスレッドで以下の関数を使い、スレッドを作成しようとしたのですが、

CreateThread(NULL, 0, ATK, (LPVOID)&x, 0, &dwID);

以下のようなエラーメッセージが出てしまいます。

'ATK':定義されていない識別子です
'関数' : 間接参照のレベルが 'LPTHREAD_START_ROUTINE' と 'int' で異なっています。
'CreateThread' : の型が 3 の仮引数および実引数と異なります。

わかる方いましたらどうがご指導お願いします。
初歩的なミスでしたらすみません。

A 回答 (5件)

構造体ではなくて


DWORD ATK(LPVOID param);
のようなプロトタイプ宣言がCreateThread( )関数の前に必要ということです
    • good
    • 0
この回答へのお礼

プロトタイプ宣言することで一応エラーは解消されました。
今までのスレッドがプロトタイプ宣言が必要なかったようなので盲点でした。

動作がうまくいっていませんが、後は自力で頑張ってみます。
皆様どうもありがとうございました。

お礼日時:2009/02/11 10:20

>まだ勉強を始めたばかりですのであまり小難しいことは気にせずに作成してました。

そろそろ本格的に勉強してみようと思います。

初心者でスレッド慣れしていない人がスレッドプログラムを組むのは危険ですよ。変数の内容が各スレッドで同期処理せずに同時更新されたりすると当たり判定やらキャラのワープやら厄介なバグが起こります。基本的にスレッドで変数の内容更新の状況をデバッガで厳密にトレースする事は不可能ですから。
スレッドで意味があるのは、マルチコアCPUを有効に活用する必要があるほど負荷が高い処理である事か、ロード処理と平行でゲームが進行する場合ぐらいです。その他の場合は紹介したタスクシステムが定番ですよ。
紹介したシューティングゲームのタスクシステムはアクション系でも問題なく使えますので検討してみてください。

このぐらいやるならスレッドの意味も有ります。↓
http://game.watch.impress.co.jp/docs/20070131/3d …
    • good
    • 0

エラーとは別の話ですが、攻撃処理を別スレッドで動かして同期処理とか大丈夫ですか? 会話の流れを見ていると、その部分を理解しているのか老婆心ながら心配になりました。


もしシングルコアでは負荷が高すぎる処理ならば、スレッドではなくマルチコア用のOpenMPやMPIを使われたほうが良いと思います。

ゲームならタスクシステムが定番ですが、
http://codezine.jp/article/detail/297?p=1
スレッドを使うのは、それとは違う目的なんですよね?
    • good
    • 0
この回答へのお礼

参考にしてみます、ありがとうございます。

まだ勉強を始めたばかりですのであまり小難しいことは気にせずに作成してました。
そろそろ本格的に勉強してみようと思います。

お礼日時:2009/02/11 10:23

使うより前でプロトタイプ宣言なりされていけないという初歩を忘れましたか?

この回答への補足

もちろん構造体は宣言しました。

下2つのエラーは私のミスかもしれないのでまだいいのですが、ATKが定義されていないというエラーが一番不可解なのです・・・

ATKは他の正常に機能しているスレッドと同様に作りましたので、ちゃんと動作するはずなのですが・・・

補足日時:2009/02/10 14:42
    • good
    • 0

エラーの内容そのままです。



>'ATK':定義されていない識別子です
「ATK」という宣言子はありますか?

>'関数' : 間接参照のレベルが 'LPTHREAD_START_ROUTINE' と 'int' で異なっています。
宣言子が見つからないのでとりあえずint型と仮定したので、型が一致してません。

>'CreateThread' : の型が 3 の仮引数および実引数と異なります。
型が一致しないのでエラーになってます。

第3引数は、LPTHREAD_START_ROUTINE型で実行する関数名を渡す必要があります。

この回答への補足

さっそくのご返答ありがとうございます。

第3引数ATKはスレッド名なので、ATKスレッドはしっかり作って、名前もしっかり確認しました。

いろいろやっておかしいと思ったので今まで使用していた他スレッドを同じ場所で作成してみたのですが、やはり同じエラーが出てしまいました。

第4引数に渡す構造体は自分で作成した構造体で構わないのですよね?

補足日時:2009/02/10 14:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!