マルチスレッド main関数の値をスレッドと共有

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

マルチスレッド main関数の値をスレッドと共有

#1

投稿記事 by 一生初心者 » 13年前

#include <stdio.h>
#include <windows.h>
#include <process.h>

unsigned __stdcall mythread0(void *);
unsigned __stdcall mythread1(void *);
unsigned __stdcall mythread2(void *);

int main()
{
int i;
HANDLE hTh[3];
DWORD thID[3];
FILE *fp;

hTh[0] = (HANDLE)_beginthreadex(NULL,
0,
mythread0,
NULL,
CREATE_SUSPENDED,
&thID[0]);
if(hTh[0] == 0)
{
printf("スレッド1作成失敗\n");
return -1;
}

hTh[1] = (HANDLE)_beginthreadex(NULL,
0,
mythread1,
NULL,
CREATE_SUSPENDED,
&thID[1]);

if(hTh[1] == 0)
{
printf("スレッド2作成失敗\n");
return -1;
}

hTh[2] = (HANDLE)_beginthreadex(NULL,
0,
mythread2,
NULL,
CREATE_SUSPENDED,
&thID[2]);

if(hTh[2] == 0)
{
printf("スレッド3作成失敗\n");
return -1;
}

for(i=0; i<3; i++)
{
ResumeThread(hTh);
}

for(i=0; i<10; i++)
{
fp = fopen("test.txt", "a");

if(fp == NULL)
{
continue;
}

fprintf(fp, "Main--------%d\n", i);
fclose(fp);
}

WaitForMultipleObjects(3,hTh,TRUE,INFINITE);

for(i = 0; i < 3; i++)
{
CloseHandle(hTh);
}

getch();
return 0;
}

unsigned __stdcall mythread0(void *lpx)
{
int i;
FILE *fp;

for(i=0; i<10; i++)
{
fp = fopen("test.txt", "a");

if(fp == NULL)
{
continue;
}

fprintf(fp, "Thread[1]---%d\n",i);
fclose(fp);
}

return 0;
}

unsigned __stdcall mythread1(void *lpx)
{
int i;
FILE *fp;

for(i=0; i<20; i++)
{
fp = fopen("test.txt", "a");

if(fp == NULL)
{
continue;
}

fprintf(fp, "Thread[2]---%d\n", i);
fclose(fp);
}

return 0;
}

unsigned __stdcall mythread2(void *lpx)
{
int i;
FILE *fp;

for(i=0; i<5; i++)
{
fp = fopen("test.txt", "a");

if(fp == NULL)
{
continue;
}

fprintf(fp, "Thread[3]---%d\n", i);
fclose(fp);
}

return 0;
}

現在こんな感じなのですが
main関数の値をmythreadの方に持ち込みたいのですが
どうやればできますか?

感じ的には下の関数のように使いたいのですが・・・
int get_max(int n, int n2)
{
if(n < n2)
{
return n2;
}
else
{
return n;
}
}

int main(void)
{
int a = 40, b = 30;
int result = get_max(a,b);

printf("最大値は%dです。",result);

return 0;
}

ぬっち
記事: 105
登録日時: 13年前
連絡を取る:

Re: マルチスレッド main関数の値をスレッドと共有

#2

投稿記事 by ぬっち » 13年前

このままでは、ちょっとソースコードが見づらいので、字下げをお願いします。
さて本題のmain関数の値をスレッドと共有することについてですが、
http://msdn.microsoft.com/ja-jp/library ... S.80).aspx
を参考に話をさせていただくと、_beginthreadexの第4引数に渡したいデータのポインタわたして、スレッド関数内で呼び出すという形をとればよいことになると思います。
ちょっと調べてみた感じ、
http://oshiete.goo.ne.jp/qa/3021719.html
が参考になるのではないでしょうか?
質問内容もほとんど同じだと思います。

閉鎖

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