none
マルチコアCPUで走るアプリは自動的にマルチスレッド? RRS feed

  • 質問

  • VS2008/ C++/ Vista/E8400の環境で趣味のMFCアプリを開発・使用する初心者です。
    同一名のCFileを毎秒300回の頻度で繰り返して開閉すると10分に1回程度Open
    できないエラーが発生し困っています。皮膚感覚としてハード要因はなく、同時に走る他の
    タスクによるCPUコアの使用率(平均50%)との関連を疑っています。特別の指定をせず
    開発したアプリでもマルチスレッドの範疇に入り、ファイル入出力なども相応の考慮がひつようなのでしょうか?
    現在はスレッドにかかわる関数、メソッドを使用したつもりはありません。
    2009年8月18日 16:48

回答

  • とりあえず、エラーの理由を確認してはどうですか?
    Openを使っているのであれば、3つめの引数にCFileExceptionのオブジェクトを渡して、OpenがFALSEを返したときに渡したCFileExceptionのオブジェクトを確認してください。

    ほかのタスクが、どれだけCPUを確保していてもファイルが開かないとは考えにくいですが。
    排他オープンをしていて、複数スレッドから開閉したりしていないですよね?
    (この場合いずれかのスレッドが開けている間は、ほかのスレッドでは開きません。マルチスレッドにしていないと言うことですが、2プロセス起動とかすると当然発生します。)

    >マルチコアCPUで走るアプリは自動的にマルチスレッド?
    マルチコアと、マルチスレッドは関係ありません。
    シングルコアで、マルチスレッドなアプリケーションも動作しますし、マルチコアでシングルスレッドのアプリケーションも動作します。

    >開発したアプリでもマルチスレッドの範疇に入り、ファイル入出力なども相応の考慮がひつようなのでしょうか?
    使用しているライブラリが、勝手にスレッド起動する場合もありますが(MFCではCFileDialogなど)、通常は自身で管理していないものまで考慮する必要はありません。


     CFile f;
     CFileException e;
     if (!f.Open(ほげほげ,ほげほげ, &e))
      e.ReportError();

    とかやると、e.ReportError();で、エラー内容のメッセージが出ます。
    • 回答としてマーク PCGO 2009年8月19日 9:28
    2009年8月18日 23:18

すべての返信

  • とりあえず、エラーの理由を確認してはどうですか?
    Openを使っているのであれば、3つめの引数にCFileExceptionのオブジェクトを渡して、OpenがFALSEを返したときに渡したCFileExceptionのオブジェクトを確認してください。

    ほかのタスクが、どれだけCPUを確保していてもファイルが開かないとは考えにくいですが。
    排他オープンをしていて、複数スレッドから開閉したりしていないですよね?
    (この場合いずれかのスレッドが開けている間は、ほかのスレッドでは開きません。マルチスレッドにしていないと言うことですが、2プロセス起動とかすると当然発生します。)

    >マルチコアCPUで走るアプリは自動的にマルチスレッド?
    マルチコアと、マルチスレッドは関係ありません。
    シングルコアで、マルチスレッドなアプリケーションも動作しますし、マルチコアでシングルスレッドのアプリケーションも動作します。

    >開発したアプリでもマルチスレッドの範疇に入り、ファイル入出力なども相応の考慮がひつようなのでしょうか?
    使用しているライブラリが、勝手にスレッド起動する場合もありますが(MFCではCFileDialogなど)、通常は自身で管理していないものまで考慮する必要はありません。


     CFile f;
     CFileException e;
     if (!f.Open(ほげほげ,ほげほげ, &e))
      e.ReportError();

    とかやると、e.ReportError();で、エラー内容のメッセージが出ます。
    • 回答としてマーク PCGO 2009年8月19日 9:28
    2009年8月18日 23:18
  • らーめん食べたいなぁ さん

    早速のご教示ありがとうございました。エラー内容は「共有違反」とわかり、当該ファイルのフォルダーを「共有しない」と
    設定したところ、直面していたトラブルは霧が晴れるように皆無になりました。セキュリテイソフト、家庭内LANなどが定期的に
    アクセスするのとタイミングが一致するとファイルのOpenエラーが発生したと考えられます。

    テストのためOpen/Closeの無限繰り返しコードを走らせると、CPUメーターはCPU1もCPU2も両方跳ね上がります。
    どこかで誰かが私の知らないうちに私の書いたコードを2つのCPUコアに勝手に分配して結果を出している、うまく動いている
    うちはありがたいが、初心者にはマルチコアは疑心暗鬼の面もあります。今後もう少し勉強してみるつもりです。

    おかげさまで敏速に当面の問題を解決でき大変感謝しております。「お礼にらーめんを差し上げたい」気持ちです。

    PCGO

    2009年8月19日 10:02