
現在プログラムでマルチスレッドをやろうとしているのですが、
マルチスレッドの関数に数値や配列などの引数を渡すことは可能でしょうか?
MSDNで調べてみると、_beginthreadex関数の4番目のNULLのところに引数リストを
指定できるとあったのですが、その意味が良くわかりませんでした。
以下のプログラムの場合にマルチスレッドに変数a, b, cを引数として渡したい場合は
どのように書けばいいのでしょうか?
#include<stdio.h>
#include<windows.h>
#include<process.h>
unsigned WINAPI MyThread( void *lpx ){
while (1)
{
printf("スレッド実行中\n");
Sleep(1000);
}
return 0;
}
void main(){
// スレッドに渡したい変数の宣言
int a = 128;
int b = 256;
int c = 512;
// スレッドIDの宣言
DWORD thID;
// マルチスレッドの開始
(HANDLE)_beginthreadex( NULL, 0, &MyThread, NULL, 0, (unsigned int*)&thID );
// ループ
while (1)
{
printf("メイン関数実行中\n");
Sleep(2000);
}
}
No.3ベストアンサー
- 回答日時:
★アドバイス
・過去に似たような質問がありました。
http://oshiete1.goo.ne.jp/qa2916783.html→『マルチスレッドについて』
↑これは _beginthread ですが引数の渡し方は同じです。
・http://www.kumei.ne.jp/c_lang/sdk/sdk_87.htm→『第87章 マルチスレッド その1』
・http://www.kumei.ne.jp/c_lang/sdk/sdk_88.htm→『第88章 マルチスレッド その2』
・http://www.kumei.ne.jp/c_lang/sdk/sdk_89.htm→『第89章 マルチスレッド その3』
・http://www.kumei.ne.jp/c_lang/intro/no_99.htm→『99章 マルチスレッド その1』
↑質問のソースは、ここと同じですね。
サンプル:
#include <stdio.h>
#include <windows.h>
#include <process.h>
// 渡したいすべての引数の構造体を宣言(自由に)
typedef struct {
int a;
int b;
int c;
} PARAM, *lpPARAM;
// スレッド側
unsigned WINAPI MyThread( void *lpx )
{
lpPARAM lpParam = (lpPARAM)lpx; ←ここで構造体を受け取る
for ( ; ; ){
printf( "スレッド実行中\n" );
printf( "a = %d\n", lpParam->a );
printf( "b = %d\n", lpParam->b );
printf( "c = %d\n", lpParam->c );
Sleep( 1000 );
}
return 0;
}
// メイン側
int main( void )
{
HANDLE hThread;
DWORD thID; // スレッドIDの宣言
PARAM param;
// 渡したいすべての引数を構造体にセット
param.a = 128; ←引数a
param.b = 256; ←引数b
param.c = 512; ←引数c
// マルチスレッドの開始
hThread = beginthreadex( NULL, 0, MyThread, ¶m, 0, (unsigned int*)&thID ); ←構造体を渡す
:
処理(メイン関数実行中)
:
CloseHandle( hThread );
return 0;
}
No.4
- 回答日時:
既に回答付いていますが…
構造体に入れてポインタを渡すのがよく取られる方法です。
なお、渡す場合にはその構造体の寿命(というか、呼び出し側での構造体の寿命)に注意が必要です。
ローカル変数使う場合は…ですが。
No.2
- 回答日時:
ボケるわけではありませんが、特定環境に依存した質問の場合は、環境を明らかにしましょう。
そもそもMSDNで調べること自体が間違っている可能性もあるわけですから。
No.1
- 回答日時:
最も簡単な方法は、a,b,cをメンバに持つ構造体を定義し
その構造体のポインタを渡すことで可能です。
データ構造さえ自分で作る気があれば他の方法もとれますが、
これが一番安全だと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
このQ&Aを見た人はこんなQ&Aも見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
マルチスレッドについて
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
スレッドの終了の仕方
C言語・C++・C#
-
-
4
スレッドの安全な終了のさせ方
C言語・C++・C#
-
5
HANDLEの宣言でのエラー
C言語・C++・C#
-
6
SetDlgItemTextの使い方について
C言語・C++・C#
-
7
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
8
エディットボックスの入力制限について
C言語・C++・C#
-
9
_beginthreadexで生成したスレッドの返り値を取得する方法
C言語・C++・C#
-
10
CString から LPCTSTRの型に変換
C言語・C++・C#
-
11
charからLPTSTRへの変換方法
C言語・C++・C#
-
12
エディットボックスで改行
その他(プログラミング・Web制作)
-
13
CStringをwchar_tに変換したい
C言語・C++・C#
-
14
エディットコントロールでEnter押した時の動作
C言語・C++・C#
-
15
テキストボックスからフォーカス外す
C言語・C++・C#
-
16
ハンドルはポインタか
C言語・C++・C#
-
17
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
18
WaitForSingleObjectの使い方について
C言語・C++・C#
-
19
LRESULTとHRESULT
C言語・C++・C#
-
20
DWORDの実際の型は何でしょうか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
std::set<int> で、ある値が何...
-
数字列を3桁ごとにカンマで区切...
-
複数桁10進数の*桁目だけを抽出...
-
C言語の問題です。大至急回答お...
-
C言語での引数の省略方法
-
式は定数値が必要です」という...
-
ビットフィールドをクリアした...
-
二次配列のqsort
-
毎回違う乱数を生成するにはど...
-
ColorをRGBで指定する方法
-
int型の割算
-
数値を入力して1からその数値ま...
-
C言語で分からないところがあり...
-
商と剰余を同時に求める(C言語)
-
return 1L
-
2921を23で割ったあまりが0な...
-
system関数がうまくいかない
-
if と配列の組み合わせ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
実数の整数部,小数部の取得
-
「{ } で囲むだけ」は正しい?
-
if と配列の組み合わせ
-
ColorをRGBで指定する方法
-
acceptをalarmでタイムアウトさ...
-
systemの戻り値を取得する方法
-
足して100になるような乱数のア...
-
std::set<int> で、ある値が何...
-
PowerShellがうまくいかない
-
C言語の配列をC++のvectorに高...
-
構造体の勉強中です 合計点の高...
おすすめ情報