排他制御

解決


浜的サム  URL  2004-04-08 13:09:41  No: 82929  IP: [192.*.*.*]

プログラムの重複起動を避けるために、排他制御を使いたいのですが。
(どこかのHPのLoadチェック方式は同時起動で誤動作するためー多分資源を取るのとチェックする時間間隔があき過ぎのため,両者が他者の存在を認識する)
そこで、OSに対し,プログラムで指定したSTRINGでロックをかけ(、他のプログラムが同一Stringでロックを検知出来る方法を知りたいのですが。)そして,プログラムが<異常終了でもなんでも>終了するとロックリリースされるメカニズムが欲しいのですが。
Touchでファイル名で記録すると、この異常終了時の処理ができないので、純然たるメモリー上&プロセス制御サービスを受けるロックなんですけど。

編集 削除
長谷川  2004-04-09 14:48:12  No: 82930  IP: [192.*.*.*]

http://nienie.com/~masapico/
上記ページの
その他の情報→アプリケーションの起動
のやり方はいかがでしょうか

編集 削除
サム  2004-04-09 15:12:21  No: 82931  IP: [192.*.*.*]

謝謝

この中のセマッフォーなんですよね!
昔Unixで使っていたので!
ところで、このセマッフォーファイルマクロは
VB.NET  でどうコードするかを知りたいのです
このサンプルと同じ関数を使用すると,未定義になるのではないかな
VB.NETサンプルプロがあればお知らせください。

編集 削除
長谷川  2004-04-12 11:23:14  No: 82932  IP: [192.*.*.*]

すいません。.NETはまだ手をだしていないためわかりかねます。

ですが、CreateMutex関数などはAPIですのでVBから呼び出してやればよいのではないかと思います。
また、確認はしていないのですが、
.NET FrameworkにSystem.Threading.Mutexクラスがあるようです。
以下はその説明とサンプルのURLです。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemthreadingmutexclasstopic.asp

ところでセマッフォーとはなんでしょうか?
よろしければ教えていただけるとうれしいのですが。

編集 削除
長谷川  2004-04-12 11:34:39  No: 82933  IP: [192.*.*.*]

先ほどの投稿よりわかりやすいものが見つかりましたので一応。

DOBON.NET .NET Tips - 二重起動を禁止する
http://dobon.net/vb/dotnet/process/checkprevinstance.html

編集 削除
ねろ  2004-04-12 14:42:55  No: 82934  IP: [192.*.*.*]

セマフォ(Semaphore)はミューテックスと同じようにWindows  APIで
利用できる、マルチスレッドの為の同期オブジェクトです。
詳しくは
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_createsemaphore.htm
をご覧下さい。

編集 削除
長谷川  2004-04-12 14:54:32  No: 82935  IP: [192.*.*.*]

ねろさん、ありがとうございます
googleで1件もヒットしなかったので途方にくれてました
うーん、まだまだ勉強が足りませんでした
便乗質問失礼いたしました

編集 削除
サム  2004-04-12 18:11:59  No: 82936  IP: [192.*.*.*]

UBoundでNGだったんですよね
(二重起動すると2つとも既にプログラム動いていますで終了)
資源をGetしてロック懸けるまでが時間がかかる。LOCK検知でプログラムが開放される時間が長く後発のプログラムも二重起動を検知する。
そこで
  Mutexに変えて4発起動してみました.するとチャンと1つだけ
チャンと残りました。
しかし4発起動し,APP内で検知する方法は、4発とも一旦
LOADINGが走り、その時点で、Systemにロックがかかったように
(1/4)以下の速度となる。<メモリー資源などの関係か?>
動きが鈍くなるので、プログラム属性としてLOADERが判断できるFLAG
などあり、LOADINGに入るまえにOSで後発のプログラムLoadを
CheckOutしてもらいたいと思いますが!!
そのような機能がWindowsにはないのでしょうかね。

編集 削除