• 締切済み

シングルスレッドで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

  • CからMFCのDLLは呼出し可能?

    C言語プログラムからMFCで作ったDLL(MFC AppWizard)を呼び出すことは可能でしょうか? Cで作ったDLL(Win32 Dinamic-Link Library)と同じように呼び出せるのでしょうか? ご教示お願いいたします。

  • MS-VisualStudio 2003と2005(マルチスレッドのみ)の環境の違い

    MS-VisualStudio2003にて C,C++,FORTRAN混合言語ソースで開発したシミュレーションプログラム  ・混合言語(CをメインにC++,FORTRAN9.0含む)  ・ライブラリ指定(シングルスレッド、debugモード) を MS-VS2005にシフトしましたが計算結果の違いが結構出てくることで 悩んでいます(悩ましいことに、多少違ってくる) MS-VS2005環境は  ・ライブラリがマルチスレッド環境のみ  ・IntelFORTRANはVer9.10 の様ですが、弊方はこの環境を持っておらず、 環境設定などの詳細がわかないで困っています PC環境、プログラミングの問題、その他いろいろと考えられる 因子はありますが、弊方と同じような開発環境で悩んだ方で ・MS-VisualStudio開発環境(2003,2005) ・IntelFORTRAN環境 (9.0/9.1) 以上の大きな相違点など何かヒントでもあればありがたく 書き込みいただければ幸いです

  • C言語記述されたものをMFCに移植

    C言語(SDK)で、記述されたソースコードを C++(MFC)で記述したいのですが、 ダイアログベースでSDKだとEnableWindowなどの 処理が増えて、バグの要因となってしまい自分自身で 最後は状態が分からなくなってしまうことがあります、 それで、MFCにして処理を減らそうと思いました。 基本的にはXXXDlg.cppに書きますが、 関数だけのファイルをMFCとして書き換えたいのですが、 メンバを使うことができません。 XXXDlg.hをincludeしたのですが、駄目でした。 どのようにしたらよろしいのでしょうか?

  • SDKやMFCでの開発について

    私はサンデープログラマなので趣味でSDKなどで簡単なプログラミングをしています。MFCにも挑戦しようかと思っているところなのですが、いかんせんVisualと名前がついているのにSDKもMFCもぜんぜんVisualではありませんので開発にかなり時間がかかってしまいます。ダイアログベースでのプログラミングがあるかとは思いますが、コントロールのインターフェースの制御などに制限があるように思えます。 ●やはりソフトハウスなどでは画面(ウィンドウ)を作るとき、 コントロールの位置など直接確認できないので、 その専門の人(画面を作る人たち)がいて、 コントロールの位置を設定して(CreateWidnow関数などのTop,Left引数の位置に座標を設定して) いちいちその度にビルドをし、コントロールの位置を確認して画面を制作しているのでしょうか? ●また、私はC#に興味があります。それはなぜかというと、SDKや特にMFCに比べて、やはりVBのように画面を作りやすくするため、VBのようなデザイン画面を取り入れたり、XMLなどを操作できるようにしたり、MFCのようにオブジェクト指向でWindowsの性能を最大限に引き出すことができる(まとまった一連の動作はオブジェクトで実行し、単機能の動作は直接APIにアクセスし実行することができる)VBとMFCとJAVAのいいところをすべて網羅した言語のように思えます。この認識は正しいのでしょうか?

  • SDKにおける印刷プレビュー実装(VisualStudio.NET2003)

    タイトル通りWin32APIをC++でゴリゴリ書いています。 恐れていた要求仕様がついに来てしまったのですが、現状のSDK状態で印刷プレビューを実装可能でしょうか? # 印刷その物は既に出来ています。 MFCならウィザードで何やらにチェックすれば印刷プレビューが使える様になる様ですが、現状のプログラムをMFCベースに書き換えるのも結構至難です。 Q1.色々探してみたのですがSDKに組み込めるクラスライブラリやDLLが見つかりません。有償でも構わないのでご存知でしたらご紹介下さい。 Q2. 現状のSDKベースにMFCの印刷プレビュー機能のみを呼出す(実装する)様な事は可能なのでしょうか? Q3.一般的にはどの様に実現しているのでしょうか? やはりMFCベースで最初から開発したり、自分でゴリゴリ作ったりするのでしょうか? 印刷プレビューを自分で作るのって…かなり困難かと… 以上、宜しくお願い致します。

  • Acrobat SDK 5.0か、それに代わるソフトの入手先

    PDFの作成と、既存PDFの操作を目的にしたソフトを組んだのですが、フリーのライブラリを探して使っている為に、JAVAベースのライブラリで、大変遅くて困り果てています。 ADOBEから出ていたAcrobat SDK 5.0は無料だったので、これをネット上で探してみたのですが、既に再配布も含めて入手可能な所を見付けられませんでした。 C/C++で組まれたライブラリはいくつか見付けたのですが、どこも結構高価な物ばかりです。 今でもAcrobat SDK 5.0を入手可能なURLか、これに代わるソフト(無料とまでは言いませんが、せめて\10,000以内が望ましい)を教えて下さい。 開発言語は、VC6.0かVC++6.0(どちらも手元にある)を予定していますが、安価な物であれば拘りません。(新しい言語を覚えるのもすぐに可能です)

  • マルチスレッドプログラミングの良技術書籍

    C++言語を用いてマルチスレッドを用いた開発を行う予定ですが、 当方マルチスレッドを用いた開発の経験がなく、 事前に前提知識を付けておきたいと思うのですが、 マルチスレッドプログラミングにおいて、 この書籍が分かりやすい、もしくはバイブル的な書籍があれば、 ご教示お願い致します。 ちなみに開発環境はVC++2005です。

  • MFC以外のGUI ライブラリの日本での評判

    MFCがかなり使われいることは知っているのですが、今は数々のオープンソース系GUIライブラリもありますし、スクリプト言語のバインディングもできていますよね。例えば私が触ったことのあるもので言うと、Gtk+、Qt、wxWidgets、Swing、Tk、WindowsFormsなどです。それぞれ英語ベースのコミュニティ・サイトみたいなものはあるのですが、日本での評判がどうなのかよくわかりません。 そこで、皆様の体験(どのライブラリをどの言語で使ったかなど)や使ってみて良かった点、悪かった点などをお聞かせください。

  • マルチスレッドの確認

    いつも参考にさせて頂いています。 現在JavaにてWEBアプリを開発中です。 頻繁に多画面から同じオブジェクトへの参照が発生するため、インスタンス変数をsessionに格納し、syncronizedで同期化を図っていました。しかしシングルスレッド対応になってしまったため、レスポンスが悪化しました。そこでインスタンス変数をローカル変数にしてしまい、syncronizedをはずし、マルチスレッドで動くように対応してみたのですが、マルチスレッドで動いているかどうかっていうのはどう確認したらよいのでしょうか?うまく説明できなくて申し訳ありませんが宜しくお願いします。

    • ベストアンサー
    • Java
  • C言語の次のステップは?

    現在、C言語を学習していてコンソールアプリケーションや Web上のCGI等は作れるようになってきました。 次の学習ステップとしてWindowsのアプリケーション作成 か、C++の言語学習にするかを悩んでいます。 C言語でのWindowsアプリケーション開発であれば、SDK(Win32API)に よる開発になると認識しています。この場合であれば特にC++の知識は 不要でしょうか?それともSDKでの開発の場合でもC++の知識は必須に なるのでしょうか? MFCとかを使うのであれば、C++の知識は必須ですよね? あるいはこれからの開発ではオブジェクト指向の知識は必須である ということでC++の学習を経て、Windowsアプリの開発について学習した 方がよろしいでしょうか? 最終的な目標はC/C++にてWindows/Linuxアプリの開発ができるように なりたいと思っています。 当面Windowsアプリを開発するにあたって、C→SDKもしくは C→C++→SDK/MFCのどちらが効率的な学習ステップになるのでしょうか? 皆さんのアドバイスをいただければ幸いです。