2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

PX-W3U3 Part.15 【W3U2・S3U2・S3U】

848 :名無しさん@編集中:2015/10/20(火) 17:48:29.19 ID:Rp2aBeYq.net
>>847
>起動時にはEpgDataCap_Bon.exeでCoInitialize処理が行われずにOpenTunerが来て、
>BonDriver切り替え時にはEpgDataCap_Bon.exeでCoInitialize処理が行われOpenTunerが来る
>という同じプロセスでも違う挙動をすることを、この調査で理解したので、

それは昔のEDCBではCoInitializeやCoUninitializeの扱いがいいかげん(単にCOMの仕様の理解不足
かもしれないけど)だったからだね。
もし凡ドラ切り替え時にCoInitializeが呼ばれるのだとしたら、それはEDCBが呼ぼうとして呼んでるんじゃ
なくてたまたまそうなってるだけだと思うよ。なんなら使ってるEDCBのソースgrepしてみると良い。
EpgDataCap_Bon本体のソースのどこからもCoInitializeは呼ばれてないと思うから。
xtne6f版work-plus-sへのコミットf9e9766でこの辺りのいいかげんさは修正されたから、それ以降の
バージョンではそんな挙動にはならないようになってるよ。

>その為オプションスイッチはいらないかと思います。

例えば、CoInitializeを呼んでいないプログラムのスレッド1からOpenTunerが呼び出されて、同じプログラムの
スレッド2からCloseTunerが呼び出されると、スレッド1でCoUninitializeは呼ばれない事になるでしょ。
この状態でReleaseして凡ドラもFreeLibraryしたら多分プログラムがクラッシュする。
あともしスレッド2の方ではCoInitializeを呼んでいた場合、CloseTunerが勝手にCoUninitializeを呼ぶ事に
なるから、ほぼ間違いなくその後のスレッド2の挙動がおかしくなる。
そう言うトラブルを防ぐためにはradi_sh版みたいな方法を採用するか、余計な事はしないオプションが
必要だって事だよ。

総レス数 1009
298 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200