ウィンドウがCLOSEされたイベントを拾うには?

[上に] [前に] [次に]
じゅん 1999/12/22(水) 16:22:32
こんにちは。
おしえていただきたいことがあります。
現在、CGIのなかの処理であるデータ登録専用ウィンドウをOPEN
したときにデータに排他処理をかけるため、ロックファイルを作成
しています。
そのロックファイルは登録または中止ボタンが押された時に削除する
しくみにしていますが、ウインドウ自体がユーザにCLOSEされてしまう
と現在、イベントが拾えなくて、排他制御が解除されなくなっています。
なにかこれを回避するために、ウィンドウがCLOSEされたイベントを拾え
る方法かもしくは、ウィンドウ自体ユーザがとじることができないように
×(右上closeボタン)が表示されないようにしたいのですが何かよい
方法があったらおしえてください。お願いします。

ラウォッチ 1999/12/22(水) 16:52:38
パールでは初心者なのでわかりませんが、
CではCGIにアラーム割り込み処理を仕掛けて、
プロセスが残った時の為に強制終了後始末処理で、
このようなロック解除の処理を入れています。

あと、ウィンドウがCLOSEされたイベントを拾うには、
あるにはあるのですが、これをするとPCをリブートしないと終われなくなりますので、
あまりおすすめできません。

ふじ [E-Mail] [HomePage] 1999/12/23(木) 11:24:27
まず、
> ロックファイルは登録または中止ボタンが押された時に削除するしくみ
というのは、どのような方法で実現されているのでしょうか。

とりあえず手元の Aoache1.3.9(UNIX) で実験した限りでは、
ブラウザの中止ボタンを押しても、ブラウザのウィンドウ自体を
close しても、どちらも TERM シグナルが飛ぶようです。

なので、Perl でシグナルをトラップしているのなら、

$SIG{'TERM'} = "unlock";
sub unlock
{
   ロック解除処理
}

とすれば、ロックを解除できるような。
Apache 以外のサーバではどんなシグナルが飛ぶのかは分かりませんが。

# なんか、別スレッド ( ../199912/99120310.htm )
# で私と同じハンドルの方が暴言を吐かれていらっしゃしますが、私じゃないです。
# っても証明しようが無いのでなんですが、一応メールアドレスとWeb
# のURL書いておきます(^^;;;

aqua-J [HomePage] 1999/12/23(木) 13:22:52
ロックファイルが生成された時間を見て、
有る程度の時間が経過していたら、強制的に
そのファイルを消すようにする方法じゃ、だめですか?

じゅん 1999/12/23(木) 14:16:56
aqua-Jさんへ
現在、その方法を使用しているのですが、ロックファイルの存在時間は
ユーザーの入力時間も考慮したうえで、30分となっています。
間違ってだれかが、ある内容の登録ウィンドウをCGIで作成したボタ
ンではなくウィンドウそのものを閉じてしまうと登録処理を実施する人
すべてが自動的にロックファイルが消される30分間待たなければいけ
ない状態になり、それが問題なんです。

ラウォッチ 1999/12/23(木) 14:36:20
forkで子供にデータ処理をやらせ、
親はとりあえず、ブラウザにもどり、
子供は処理終了後exit()するってのはどうですか?

これでしたら、以下が参考になります!
../199910/99100140.htm

じゅん 1999/12/25(土) 14:12:12
[[解決]]
投稿してくださった皆様ありがとうございます。
皆様の意見をもとにいろいろ試してみようと思います。

[上に] [前に] [次に]