• ベストアンサー

複数のプログラムの同時実行ができないように制御したいのですが…

このたびゲームを製作しているのですが、ゲーム本体と設定プログラムを同時に起動できなくしたいのですが、やり方がわからず困っています。 はじめはファイルのアクセス権を利用してやろうとしたのですが、うまくいきませんでした。(片方のプログラムであるファイルを開いておき、もう片方のプログラムでファイルを開こうとするとエラーが発生するという感じです) 何かいい方法は無いでしょうか?教えていただけると助かります。 よろしくお願いいたいますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.4

VC++.netでも普通に使えます。 VC++.netは単にフレームワークも使えるといえうだけで普通にAPIを呼ぶことも出来ます。 #1で提示したURLのソースでエラーがでるのは elseの中括弧がないからとかじゃないですか? 後、 OpenMutexとCreateMutexの第3引数が一致してないとか ちょっと不備があるサンプルでした。 正しくはこうです。 HANDLE hMutex; hMutex = OpenMutex(MUTEX_ALL_ACCESS, false, "ApplicationName"); if( hMutex != 0 ) { CloseHandle(hMutex); return 1; } else { hMutex = CreateMutex( NULL, true, "ApplicationName"); } >ミューテックスを作成したプログラムが何らかの形で強制終了してしまった場合、そのミューテックスは開放されるのでしょうか? 基本的に開放されます。

genki140
質問者

お礼

本当です、できました。 助かりました。ありがとうございますm(_ _)m

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

C#やVB.NETのサンプルですが、下記URLを見てください。MC++に移植するのも難しくはないでしょう。

参考URL:
http://jeanne.wankuma.com/tips/process/02-mutex.html
genki140
質問者

お礼

分かりました、がんばってみます。ありがとうございました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

著しく環境に依存します。 実行環境と使用している開発ツールぐらいは書きましょう。

genki140
質問者

補足

情報不足ですみません・・・ OSはWindowsXPです。 開発環境は、VisualC++.net 2003を使用し、 ゲーム本体はWin32で製作し、設定プログラムは.net frameworkを使用して製作しています。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

方法は何通りかありますが、 簡単なのはCreateMutexを使う方法です。 「二重起動防止」で検索すればいっぱいひっかかりますよ。 http://kobe.cool.ne.jp/tanomi/qanda/a007.html

genki140
質問者

お礼

補足に書き忘れた質問がありましたので、こちらに書かせていただきます。 ミューテックスを作成したプログラムが何らかの形で強制終了してしまった場合、そのミューテックスは開放されるのでしょうか? 開放されないと、次の起動で多重起動ということになってしまいますよね^^;

genki140
質問者

補足

ありがとうございます。ミューテックスというものの存在をはじめて知りました。とても参考になりました。 Win32で試してみたところ成功したのですが、C++.NETで試してみたところ、エラーが発生してしまいました。(当たり前ですね^^;) 記述しなかった私が悪いのですが、ゲーム本体はWin32で、設定プログラムは.NETで製作しています。なので、.netのほうでのミューテックスを扱う方法を教えていただけると本当に助かります。 説明があいまいですみませんでした。

関連するQ&A

  • 複数のプログラムを同時に動かすには

    ASUSTeK P5KPL-CM、Core2Duo 3GHzとメモリ4GByte、windows 7 64bitの自作PCを使っています。 例えば、winrarでファイルを解凍しながら、テキストエディタで文字を打とうとして ものすごく動作を遅くなってしまい、ほとんど打つことができなくなります。 このときwinrarは20%程度しかCPUを占有していません。 またword2010とIE9を同時に起動しておき、IE9が何かの拍子にフリーズすると PC全体が重くなりword2010までも重くなって使用に耐えなくなります。 マルチコアのCPUは複数のプログラムを同時に起動するのに適したように開発されたものですよね? これはCPUを4つや8つもっているようなCorei7とかにすれば改善されるのでしょうか? CPU占有率は大したことはないのでメモリを増やせば良いのでしょうか?

  • MATLABの2つのプログラム間でデータのやりとり

    MATLABで同時に2つのプログラムを動かし、プログラム間でデータのやりとりをしたいです。 例えば、片方でsave data.mat、もう片方でload data.matとすると、 data.mat書き込み中にアクセスすることがあるため、 以下の(1)~(3)のようなエラーメッセージが出ます。 (1)エラー load MAT ファイル data.mat を読み込むことができません。 ファイルが壊れている可能性があります。 (2)エラー load ASCII ファイル data.mat の 2行目の列数は、前の行と同じでなければなりません。 (3)エラー load MAT ファイル data.mat を読み込めません:2 進数の MAT ファイルではありません。 テキストとして読み込むために LOAD -ASCII を試してください。 なにか、うまい方法は無いでしょうか? ちなみに、プログラムはMATLAB Compilerを利用し、いずれも24時間動きっぱなしにすることを想定しています。

  • Accessを複数人(2人)で同時に開いてテーブル作成。

    Accessを使用してDBを作成しました。 ・テーブルだけのファイル ・それ以外のファイル とわけて作成してあります。 同時に開いたりする分には何も問題ないのですが、 テーブル作成を同時の行うとエラーが発生します。 これを回避するような策というのはあるのでしょうか?

  • gccプログラムで複数の実行ファイルを起動可能?

    Ubuntu LinuxでTCPクライアント通信を行うプログラムをgccで作成しています。 現在、特定のサーバーに対して接続して数十秒ごとに1kバイト程度のパケットを送信するプログラムを1つ作りました。 その後、キーボードのキー入力に応じて、そのキー操作のログテキストファイルを出力プログラムも作りました。 それぞれのプログラムをgccでコンパイルして2つの実行ファイルが作成されました。 キー操作のログテキストファイルをの内容に応じてTCP通信側のプログラムが送信するパケットの内容を変えたいと思っているのですが、この場合片方の実行ファイルを起動した場合に、もう一つの実行ファイルも起動するようにするにはどうしたら良いかご教示頂けないでしょうか? どうぞ、よろしくお願い致します。

  • プログラムが起動できなくなりました。

    ウイルスかどうかわかりませんが、file associationが勝手に変更されてしまったようで、セキュリティソフトが報告しました。その後、ショートカットからも、本体のアイコンからもプログラムを起動できなくなりました。マイコンピュータのプロパティも開きません。ヘルプとサポートも、プログラムのアクセスと規定の設定も開かず、いずれも「指定されたファイルに対してこれを操作するプログラムが関連づけられていません。「フォルダオプション」のコントロールパネルでプログラムを関連づけて下さい」と表示されます。「ファイル名を指定して実行する」では、commandと入力してエンターキーを押すと、「このファイルを開けません。作成元のプログラムが必要です」と表示されます。ファイルを開くとプログラムも起動するので、プログラム自体はあるのですが、そのプログラムで作ったファイルがないと起動することができなくなり、困っています。

  • FTPサーバーに置いてあるプログラムを実行するには

    FTPサーバーに置いてあるプログラムを実行するには 例えばtest.exeというプログラムがFTpサーバーにあったとします。それを自分のPC上にあるファイルと同じように起動したりすることはできますか? 例えばjarファイルを起動するにはJREがいると思うのですが、JREがインストールされたPCからFTPサーバーにアクセスしてそのサーバー上にあるjarファイルを起動することはできますか?

  • 複数のPHPファイルを二つ以上同時に実行する方法を

    通常、PHPファイルにアクセスするとプログラムが実行されると思うのですが、ひとつのファイルにアクセスすると別に用意していたプログラムも動作するようなものを考えています。 具体的にはTwilioという電話にxml(TwiML)や用意されたAPIを、PHPで制御できるのですが、番号Aに電話がかかってきた場合に、別の番号Bからあらかじめ設定していた番号に電話をかけて通知するプログラムを書きたいのですがうまくいきません。 どなたかご教授、お願いします。

    • 締切済み
    • PHP
  • アクセス制御?

    昨日IEをふと開こうとしたら エラー リクエストされた URL は取得できませんでした -------------------------------------------------------------------------------- 以下の URL を取得した際に: http:○○○○○ 次のエラーが発生しました: アクセスできません. 現在設定されているアクセス制御の設定のため,あなたからのリクエストは受けつけられません.この設定が正しくないと思われる場合には,このサービスの管理者へ連絡してください. とでました とくにいじった記憶もないのですがどうやったらIEからアクセスできるでしょうか? オンラインゲームで課金しようとしたらそっちでも同じことが起こりました

  • アプリケーションの実行プログラムって?

    dell inspiron1100 で XP HEを使っています。 昨日からの現象ですが スタート-プログラム からアプリケーションを開こうとすると 全てのアプリケーションにおいて 【指定されたファイルに対してこの操作を行うプログラムが関連付けられていません。〔フォルダオプション〕コントロールパネルでプログラムを関連付けてください】 と、でます。 フォルダが変わったかな?と思って スタート-プログラムの中にある アプリケーションのプロパティーを見たのですが リンク先はあっています。 どうやらexeを実行するのにエラーが起きているようです。 たとえば エクセルの入っていないパソコンでエクセルファイルを 開くとこういう現象がおきますよね? その場合エクセルをインストールする。またはファイルのプロパティから関連付けられますが、アプリケーションを実行するための 関連付けとなると見当もつきません・・・・・。 プログラムの再関連付けの場合どういたらいいでしょうか? ご教授願えると助かります。 補足としまして スタート-プログラムから アプリケーションを開こうとしてもエラーがでますが 以前作ったファイルからアプリケーションを開いた場合 プログラムは実行されます。 例 スタート-プログラム-エクセル起動 ×エラー(リンク先にEXCEL.EXEあり) エクセルファイル 無題1.xlsをクリック→エクセル起動 無題1表示 ちょっと説明下手ですみませんが よろしくお願いいたします

  • プログラムの削除について

    パソコンで消したいプログラムがあるのですが、どうしても消すことが出来ません。 5つくらいあるのですが、プログラムの削除をしようとすると・・・ 「インストールサポートファイルをインストールできませんでした。指定されたファイルが見つかりませんでした。」 「サポートファイルを解凍中にエラーが発生しました。指定されたファイルが見つかりませんでした。」 といったエラーができます。 もう一度プログラムをダウンロードしようと思ったのですが、どこでダウンロードしたのか全く覚えていません・・ 削除できる方法があるのでしょうか? またそのプログラムをそのまま削除しないで残しておいても問題はないでしょうか? ちなみにプログラムはオンラインゲーム系です。

専門家に質問してみよう