マルチスレッドのスレッドプロシージャって、一つのスレッドに一つずつ書かなきゃいけないの? – プログラミング – Home

マルチスレッドのスレッドプロシージャっ...
 
通知
すべてクリア

[解決済] マルチスレッドのスレッドプロシージャって、一つのスレッドに一つずつ書かなきゃいけないの?


ひげそり
 ひげそり
(@ひげそり)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

マルチスレッド・プログラムに挑戦しているものです。
ある処理を複数の別スレッドに行わせようとしています。

ウィンドウのクライアント領域を四つにわけて、
左上にランダムに矩形を
左下にランダムに楕円を
右上にランダムに三角形を
右下にランダムに同心円を
別々のスレッドで描画させる。

このばあい、CreateThread関数にしていするThreadProcって、それぞれに一つずつ作ら
ないといけないんでしょうか?
描画する関数部分だけ、別に作っておいて、スレッド・プロシージャは同じものを使
い、メインスレッドからスレッド・プロシージャに渡すパラメータで描画関数を指定す
る。
これで何か問題がありますか?

CreateThread(描画関数1へのポインタ);
CreateThread(描画関数2へのポインタ);
CreateThread(描画関数3へのポインタ);
CreateThread(描画関数4へのポインタ);

で、ThreadProcは同じものを使うことってできますか? その辺りが分からないです。


引用未解決
トピックタグ
chamaro
 chamaro
(@chamaro)
ゲスト
結合: 17年前
投稿: 19
 

問題ありません


返信引用
オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
 

> スレッド・プロシージャに渡すパラメータで描画関数を指定する。
ちゃんと分岐するならOK!

> で、ThreadProcは同じものを使うことってできますか?
出来ます。頑張って下さい。


返信引用
ひげそり
 ひげそり
(@ひげそり)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

つまり
CreateThread関数を4回よびだすと、自プロセス内に新しく4つのスレッドが作られ
る、って認識でOK?ですか? CreateThread関数内でのlpStartAddress引数で指定す
るスレッドプロシージャに同じ関数をしていしていても?
このlpStartAddressは新しいスレッドの開始アドレスを意味する、ってMSDNには載って
るんですけど・・・

一応自分で確かめたところ、同じスレッドプロシージャ関数を指定して4回
CreateThreadを繰り返し呼び出したものと、別々に四つのスレッドプロシージャを定義
して、それぞれを一回ずつCreateThreadで呼び出した場合の動作は、同じように見えた
ので、想定どおりの動作になってるようなんですが・・・

開始ポイント?(何といったらいいのか・・)、開始アドレスが同じでもスレッドは別
になっているんでしょうか?


返信引用
yoh2
 yoh2
(@yoh2)
ゲスト
結合: 18年前
投稿: 70
 

> 開始ポイント?(何といったらいいのか・・)、開始アドレスが同じでもスレッドは別
> になっているんでしょうか?

そういうこと。
シングルスレッドでも、再帰呼び出しなどで同じ関数を呼んでもそれぞれの動作は
独立していますよね。それと同じ感覚でOKです。
関数内のstatic変数の場合は値が共有されることも含めて同じように扱えます。
まあ、static変数に関しては、新しく同期の問題が加わりますが。


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

>開始ポイント?(何といったらいいのか・・)、開始アドレスが同じでもスレッドは別
>になっているんでしょうか?
lpStartAddress(が示す先)は、「命令が記述されている書類」と考えてみてください

CreateThredは、呼ばれるたびに
新しい人員を用意して「この命令書を処理してね」って言ってるだけです

一つの実行ファイルを、複数同時に起動してるような感じ。


返信引用
ひげそり
 ひげそり
(@ひげそり)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

なるほど。
Create~、という名前が示すように新しくクローン(プログラム的にはインスタンスっ
て言ったほうがいいかな)を作っているようなもんなんですね。

よく分かりました。
レスありがとうございました。
解決しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました