// 出展
// http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10127304280
// 「MinGWでthreadのコンパイルができない」
// に対する、(同じ問題にぶつかっていた)江端のトライアル
// [Step.1] (私の場合)C:\mingw64の中に置かれていた"pthreads-w64.zip"を解凍
// (これ解凍されないまま、ここに置かれているみたい)
// C:\mingw64\pthreads-w64というディレクトリに展開される
// [Step.2] 中身をコピー
// C:\mingw64\pthreads-w64\binの中身を、C:\mingw64\binにコピー
// C:\mingw64\pthreads-w64\x86_64-w64-mingw32\include の中身を、C:\mingw64\x86_64-w64-mingw32\includeにコピー
// C:\mingw64\pthreads-w64\x86_64-w64-mingw32\lib の中身を、 C:\mingw64\x86_64-w64-mingw32\libにコピー
// したら、後は、何もしなくても(環境変数とかの設定も不要)で、以下のスレッドプログラムは動いた。
// gcc -g pthread.cpp -o pthread -lpthread
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
#include <unistd.h> // usleep()に必要
// グローバル変数
char global_str[]="Grobal variable";
int i;
//スレッドとして動作させる関数
static void *kodomo(void *arg)
{
for(i=1;i<20;i++){
fputs("サッチモ!",stderr);
fflush(stderr); //溜めずにすぐに画面に出す
//0〜999msecのランダム秒待つ
usleep((rand()%1000)*1000);
}
printf("子からも%sが見えます\n",global_str);
return NULL; //終了時、暗黙にpthread_exit()される
}
int main(void)
{
//スレッド型変数の定義
pthread_t thread1;
//子スレッドを動かす
if(pthread_create(&thread1,NULL,kodomo,NULL)!=0){
return EXIT_FAILURE;
}
for(i=1;i<20;i++){
fputs("ニッチモ!",stderr);
fflush(stdout); //溜めずにすぐ画面に出す
//0〜999msecのランダム秒待つ
usleep((rand()%1000)*1000);
}
//子スレッドが終わるのを待つ
if(pthread_join(thread1,NULL)!=0){
return EXIT_FAILURE;
}
printf("親からも%sが見えます\n",global_str);
//子スレッドが終わったら親も終了してよい
return EXIT_SUCCESS;
}