• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マルチスレッドのやり方)

マルチスレッドのやり方

このQ&Aのポイント
  • マルチスレッドのやり方について
  • MacでのC言語でのマルチスレッドの方法についての質問です。
  • CreateThread関数を使おうとしているがエラーが出るため、他の方法を知りたい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

undeclaredというエラーは、コンパイル時にある関数を呼び出す処理を解釈するときにその関数がその時点でどこにも宣言されていないことを示します。無論定義(実装)もありません。 なので単純にC言語のルールが守られていないというエラーです。スレッド関係のエラーではないようです。 main関数の前に void paint( void ); と宣言するだけでなおるはずです。

その他の回答 (3)

回答No.3

どうしてもC言語とういことであればC言語で使えるライブラリやpthreadを使わないとMacではだめでしょうね。 もしC言語のみということにこだわる必要がないのであればC++とboostを使用されることをお勧めいたします。 boost::threadはポータブルに使えてソースが環境依存しにくくなるので便利です。 MacでもWindowsでもご自身で書かれたプログラムが根本的な処理は同じようにかけるということです。無論環境ごとにboostライブラリをビルドしてやる必要があり、環境ごとにそのライブラリを使ってください。

mogeraccho
質問者

お礼

ご回答ありがとうございます。 学校の課題なので、C言語でないとだめなのです。 ただ、最初に書かせていただいたとおり、BASICの経験があり少しくらいはプログラミング経験があるので、やってみようかと思い質問させていただいています。 No.1の方の回答を参考に調べ、 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> //グローバル変数 int point; //得点 int life; //ライフ main(){ int flag; int ly; //描画関数のスレッド pthread_t thread; pthread_create(&thread,NULL,paint,NULL); pthread_join(thread,0); getchar(); return 0; } //画面描写するルーチン(無限ループマルチスレッド用) paint(){ for (;;){  何らかの処理~ //スレッドの一時休止 usleep(160); } } こんな感じで書いたのですが、 error: 'paint' undeclared (first use in this function) と表示されます。 どのように修正したらいいのでしょうか。

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

ここらへんが参考になるでしょう。 Threading Programming Guide http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/ C言語でそこまで高レベルのことをやるなら、Cocoa(Objective-C)を系統的に勉強したほうがいいと思いますが?

mogeraccho
質問者

お礼

ご回答ありがとうございます。 申し訳ないですが、私には読解できませんでした。 そしてマルチスレッドが高レベルだということは知りませんでした。 No.1の方の回答を参考に調べ、 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> //グローバル変数 int point; //得点 int life; //ライフ main(){ int flag; int ly; //描画関数のスレッド pthread_t thread; pthread_create(&thread,NULL,paint,NULL); pthread_join(thread,0); getchar(); return 0; } //画面描写するルーチン(無限ループマルチスレッド用) paint(){ for (;;){  何らかの処理~ //スレッドの一時休止 usleep(160); } } こんな感じで書いたのですが、 error: 'paint' undeclared (first use in this function) と表示されます。 どのように修正したらいいのでしょうか。

回答No.1

Macでも当然マルチスレッド実装は出来ます。 ただしCreateThreadはWIndowsが提供しているAPIですからMACでは使えません。 MACでのプログラミング経験がないのでわかりませんが、 POSIXスレッドが使えたはずです。 pthread_createで検索してみてください。 使用例がわんさかヒットするはずです。

mogeraccho
質問者

お礼

ご回答ありがとうございます。 pthread_createで調べ、自分でいろいろやっているのですが pthread_create関数の第三引数でエラーが出てしまいます。 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> //グローバル変数 int point; //得点 int life; //ライフ main(){ int flag; int ly; //描画関数のスレッド pthread_t thread; pthread_create(&thread,NULL,paint,NULL); pthread_join(thread,0); getchar(); return 0; } //画面描写するルーチン(無限ループマルチスレッド用) paint(){ for (;;){  何らかの処理~ //スレッドの一時休止 usleep(160); } } こんな感じで書いたのですが、 error: 'paint' undeclared (first use in this function) と表示されます。 どのように修正したらいいのでしょうか。