tancoroのプロフィール
- ベストアンサー数
- 11
- ベストアンサー率
- 52%
- お礼率
- 63%
- 登録日2003/05/06
- 性別男性
- 職業自営業
- 都道府県東京都
- スレッドの安全な終了のさせ方
スレッドの安全な終了のさせ方 メインスレッドにてCreateThread命令を使い、あるサブスレッドを作りました。 このサブスレッドは内部でmallocを使い動的に配列領域を確保して その配列領域をforループ等で「かなり時間の掛かる処理」として繰り返し アクセスしています。 ループが終了した時に「free」を実行してmalloc領域を開放しています。 アプリ終了時にメインスレッドからこのサブスレッドを終了させるのに メインウインドウにWM_DESTROYメッセージが送られた時、これまで単に そこで「CloseHandle(hSubThread);」とだけ書いていたのですが、 もしかしたらこれでは場合によっては(サブスレッドがループ処理中だったら) malloc領域が開放されずにリークしてしまうのではないかと思いました。 そこでイベントオブジェクトを使い、サブスレッドがループ処理中の 時には非シグナル状態にして、ループが終了しfreeで領域を開放した後 シグナル状態にするということにして、メインスレッドはそれを WaitForSingleObjectで待つという構造にしました。 ところが「メインスレッドに待ちを作るな」という言葉通り、これでは 上手く行きませんでした。サブスレッドはその時間の掛かる処理の 最中でSendMassage等でメインスレッドの処理を促すような命令を (例えばその処理の進捗状況を表示するなど)を幾つも行っていたので、 もしWaitFor~でメインを待たせると「サブスレッドの処理も進まなくなり 結果両方がロックして動かなくなってしまう」という悲しい状況に 嵌ってしまうのです。 SendMessageを徹底的に無くすということも考えたのですが、 (例えばPostMessageに書き換えるなどもやってみたのですが、これは 全く意図した動作をしてくれない場合もあり)、別の方法では どうしても代替できないケースもあって、全て消すというのは 現実的ではないのかもと。。 このようなサブスレッドを安全に終了させるにはどうしたら良いでしょうか? あるいは単にデストロイ時にCloseHandleとするだけでも良いのでしょうか?
- ベストアンサー
- C・C++・C#
- jacoby2200
- 回答数4
- 複数の変数を宣言する時、同時に初期化?できないでしょうか?
複数の変数を宣言する時、同時に初期化?できないでしょうか? 例えば、 int a,b,c; とした時に、それぞれに1を入れる、みたいに。
- ポアソン分布について
ポアソン分布についてですが、これは二項分布でnを無限大にしたときの近似値と考えていいのですよね。正確な値は二項分布のほうだと思っていて間違いないでしょうか?
- 離散確立変数の確立分布
つぼの中にw個の白球とr個の赤球がはいっているとします。このw+r個の球が入っているつぼからn個を抽出するとき、Xをこのなかに含まれる白球の数とすると、Xの確立分布は P(X=x)=(wCx・rCn-x)/w+rCn x=0,1・・・n で与えられると思います。この分布は超幾何分布というんですよね?(多分・・) w+r=N=母集団の要素の数、n=標本の大きさ、w=ある特性を有している要素の数(たとえば不良品の数、失業者の数)、r=その特性を有していない要素の数とすれば、この超幾何分布は有限母集団からの標本抽出を表しますよね。このときに、 E(X)=np,p=w/N(母集団のある特性をもつ要素の割合) var(X)=npq((N-n)/(N-1)), q=1-p をどう証明したらよいのでしょうか? また、(N-n)/(N-1)は分散に対する有限母集団修正を表してて、n/Nがきわめて小さければ、この修正項はほぼ1とみなすことができるからって、二項分布がこの分布の近似になることをどうやって確かめればよいんでしょうか?
- ひとつのサイコロをn回・・・
(2)の期待値を求めるものが解けません(1)は解けたのですが。 座標平面状の原点から動点P(x,y)がサイコロを投げて1~4ならx方向に+1、5,6ならy方向に+1進みます。 n回投げたとき (1)x-y=k (-k≦n≦k)である確立は? x方向(→)に進む確立はp=2/3 y方向(↑)に進む確立はq=1/3 ↑…i回、→n-i回すすむとして x-y=i-(n-i)=2i-n=k ∴i=(n+k)/2 よって求める確立Pnは n+kが奇数:Pn=0 n+kが奇数:Pn=n_C_i・p^{i}・q^{n-i}(=Piとおく)(i,p,qを代入) (2)期待値を求める