• 締切済み

シングルスレッドでMFC

現在Windows用某製品のプラグインを開発しています。 そのプラグインはC言語ベースで開発されており、SDKのマニュアルには、マルチスレッドには対応していない旨書かれています。 ここで質問なのですが、MFCのシングルスレッド用スタティックライブラリというのは存在するのでしょうか?やはりシングルスレッドではMFCを諦めるしかないのでしょうか、、 ご存知のかたぜひご教示ください。

みんなの回答

noname#143071
noname#143071
回答No.4

>>そんな事はありません。 MFCはマルチスレッドを想定していますよ。スレッド毎にメッセージマップのインスタンスを持ちます。今も昔も変わりません。 もしかして、GOOD-Frの飼い犬かね? MFCはマルチスレッドを想定しているので、シングルスレッド、マルチスレッドの両方のライブラリがあったこの時代でも、リンクするライブラリは常にマルチスレッド用のものです。 ちなみに、現代のVisualC++には、シングルスレッド用ライブラリが存在しません。 アプリケーションのメインウィンドウはプライマリスレッドで動作します。 明示的にサブスレッドを作成しない限り、スレッドの数は常に1個です。 関数呼び出しの際に排他制御の必要はありません。

  • maya666
  • ベストアンサー率0% (0/0)
回答No.3

>MFCはもともとマルチスレッドを想定してつくられている そんな事はありません。MFCで作られた、プログラムでも明示的にスレッドを起こさない限り主スレッドで動きます。 新規にMFCプロジェクトで実行ファイルを作って起動させ、タスクマネージャでスレッドの数を確認すれば一つしかない事がすぐにわかります。

  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.2

>たしかCWinAppなどを使うと初回時にスレッドを一本立ててアプリは最低でも >その下で動くようになる、、など、気付かないところでスレッドをたてられて >しまうので、マルチスレッドバージョンのMFCは使えないのではないかという >気がしています これってCWinAppを使用すると内部でメインスレッド以外にワーカースレッドを 作成してしまうって事ですか? ちなみにプラグインというのはDLLみたいな形で作成するのでしょうか?

akubiII
質問者

補足

すみません、、補足を書いたのですが正常に書き込まれていませんでした。 >これってCWinAppを使用すると内部でメインスレッド以外にワーカースレッドを >作成してしまうって事ですか? 詳しくは覚えていないのですが、CWinAppでRunを実行するとスレッドが一本走り、 それ以降の処理はそこで行われますよね。それを言いたかったのです。本来Windowsアプリはスレッドが1本もなくても動くものですから、、(もしくは最近のWindowsだと起動時のプロセスもスレッド扱いとなっているのかな、、?シングルスレッドと呼ばれるだけに。そこまではちょっとわかりません。もしくは理解を誤っているようでしたらすみません、、) つまりMFCはもともとマルチスレッドを想定してつくられているので、MFCクラスを使用すると裏でスレッドが走るケースがあるのではないかということです、、 >ちなみにプラグインというのはDLLみたいな形で作成するのでしょうか? 説明不足で申し訳ありません。たしかにおっしゃる通りDLLで作成します。

  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.1

MFCをどのように使用するのか分からないので何ともいえませんが 基本的にプラグイン側からMFCをシングルスレッドで(関数等を)使用すると いうのであれば特に問題はないのではないでしょうか。 逆にMFCでの処理をマルチスレッドで書いていて非同期に製品側にアクセスする (多分ないと思いますが..)場合には排他制御等のしかけが必要と思います。

akubiII
質問者

補足

ご回答ありがとうございます。 MFCはアプリケーションを利用する際にしか用いたことがないのであれなのですが、、 やはりライブラリはマルチスレッドバージョンしか用意されていないようなのでコンパイラオプションはマルチスレッドにするしかないのでしょうね、、 たしかCWinAppなどを使うと初回時にスレッドを一本立ててアプリは最低でもその下で動くようになる、、など、気付かないところでスレッドをたてられてしまうので、マルチスレッドバージョンのMFCは使えないのではないかという気がしています。

関連するQ&A

専門家に質問してみよう