MacでC言語の勉強をしています。
WindowsでBASICのプログラム経験が多少あり、
C言語のサイトも参考にしていたので、Macでも同じように出来るかな?
と思っていると、出来ませんでした。
CreateThread関数を使おうとしていたのですが、Cではwindows.hのようなファイルを参考にしたサイトではインクルードさせていたのでコピーペーストし、
createthreadとしたのですが、(おそらく)「windows.hのようなファイルはない」のようなエラーが出ます。
Macではマルチスレッドは使用できないのでしょうか。
それともほかのやり方があるのでしょうか。
すいませんがご教示いただけると幸いです。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
undeclaredというエラーは、コンパイル時にある関数を呼び出す処理を解釈するときにその関数がその時点でどこにも宣言されていないことを示します。
無論定義(実装)もありません。なので単純にC言語のルールが守られていないというエラーです。スレッド関係のエラーではないようです。
main関数の前に
void paint( void );
と宣言するだけでなおるはずです。
No.3
- 回答日時:
どうしてもC言語とういことであればC言語で使えるライブラリやpthreadを使わないとMacではだめでしょうね。
もしC言語のみということにこだわる必要がないのであればC++とboostを使用されることをお勧めいたします。
boost::threadはポータブルに使えてソースが環境依存しにくくなるので便利です。
MacでもWindowsでもご自身で書かれたプログラムが根本的な処理は同じようにかけるということです。無論環境ごとにboostライブラリをビルドしてやる必要があり、環境ごとにそのライブラリを使ってください。
ご回答ありがとうございます。
学校の課題なので、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)
と表示されます。
どのように修正したらいいのでしょうか。
No.2
- 回答日時:
ここらへんが参考になるでしょう。
Threading Programming Guide
http://developer.apple.com/library/mac/documenta …
C言語でそこまで高レベルのことをやるなら、Cocoa(Objective-C)を系統的に勉強したほうがいいと思いますが?
ご回答ありがとうございます。
申し訳ないですが、私には読解できませんでした。
そしてマルチスレッドが高レベルだということは知りませんでした。
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で検索してみてください。
使用例がわんさかヒットするはずです。
ご回答ありがとうございます。
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)
と表示されます。
どのように修正したらいいのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- iCloud iCloudのデータがMacbookのストレージをいっぱいにしてしまう 2 2022/08/31 22:34
- マウス・キーボード macからリモートデスクトップでwindowsに接続した際のキーボード配列 3 2023/07/10 08:40
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
- Windows 7 Windows7でMicrosoft VirtualPC2007 SP1を使用する 9 2022/11/17 13:12
- Mac OS 外付けHDDのiPhoto(9.6.1)に保存している写真をWindowsにコピーする方法 6 2023/06/13 18:53
- Mac OS MacのFinderでmovファイルのサムネイルが表示されないのと、クイックルックが出来ません。 こ 3 2023/07/24 18:40
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- 据え置き型ゲーム機 windows11で任天堂switchのSDカードをコピーするには 1 2022/04/06 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
VB2008で定数に色の設定をした...
-
Excelのエラーで困ってます。
-
sys/time.hのインクルードがで...
-
fortranでプログラムを実行する...
-
HEWを使用しているのですが、こ...
-
VBAでファイルを開くプログラム...
-
ACCESSのDate関数のエラー表示...
-
error C3867 関数呼び出しには...
-
エクセルでマクロを実行すると...
-
「マクロが再定義されました」...
-
dos.hについて
-
コンパイルできません。
-
MQL5にて謎のエラーが発生!だ...
-
コールバック関数指定時のエラー
-
Excel2007VBAでコンパイルエラー
-
左側がクラス、構造体、共用体...
-
WindowsからLinuxへの移植
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
Excelのエラーで困ってます。
-
適切な変換関数が存在しない???
-
VB2008で定数に色の設定をした...
-
fortranでプログラムを実行する...
-
HEWを使用しているのですが、こ...
-
visual C++ でビルドの中止がで...
-
sys/time.hのインクルードがで...
-
デバッグ中のエラーのことで教...
-
multiple definitionというエラー
-
LPCWSTRとchar
-
HANDLEの宣言でのエラー
-
ビルド失敗 指定されたファイ...
-
ACCESSのDate関数のエラー表示...
-
ユーザフォーム開くとエラーになる
-
Handlesについて
-
VBScriptによるExecuteExcel4Ma...
-
BC30002: 型 'ListItem' が定義...
おすすめ情報