ページ 1 / 1
プログラムの強制終了
Posted: 2005年5月30日(月) 21:49
by あおぞら
一生懸命動いてるプログラムを、強制終了したくなる時があります。Xマークを押すと「このプログラムは応答していません」と
出てきますが、サクッと強制終了させる為の、お約束のコーディ
ングをご教示頂きたく。
Win XP Pro+AB3
Posted: 2005年5月30日(月) 21:49
by mako20
[Ctrl]+[Alt]+[Del]キーを押した後、プロセスの中にある自作プログラム名(プロジェクト名.exe)を「プロセスの終了」すればできます。
Windowsの基本的操作を一巡で覚えてる時にあるので覚えといたほうがいいです
Posted: 2005年5月30日(月) 21:50
by あおぞら
コメントありがとうございました。私の設問の仕方が悪かったようで
すね。ウインドウの右上のX印をクリックすると、後腐れなく終了して
くれるようなコーディングがあるのではないかな?という事でした。
ループの中にトラップを入れて等々
ちなみに左手が動かせないので3つ同時のキーダウンは、最初から
諦めてました(^_^;
Posted: 2005年5月30日(月) 21:50
by 通りすがり
> コメントありがとうございました。私の設問の仕方が悪かったようで
> すね。ウインドウの右上のX印をクリックすると、後腐れなく終了して
> くれるようなコーディングがあるのではないかな?という事でした。
> ループの中にトラップを入れて等々
そもそも、「このプログラムは応答していません」と出るのはプログラムの動作ではなく、
Windowsの動作ですので、プログラム自体でどうかするものではないです。
よって、そのようなコーディング方法はない、というのが答えとなります。
タスクマネージャのように、動いているプロセスを他のソフトから
強制終了させるという場合はまた話が違ってきますが。
それとは別に、
>サクッと強制終了させる為の、お約束のコーディングをご教示頂きたく。
揚げ足となってしまいますが、このように「何かあるんだろ?教えろよ」
的な書き方をしては協力的な回答は得られないと思います。
Posted: 2005年5月30日(月) 21:50
by 通行人
> ウインドウの右上のX印をクリックすると、後腐れなく終了して
> くれるようなコーディングがあるのではないかな?という事でした。
通常、[×]をクリックしたら後腐れなく終了するはずです。
[×]を押した時に「このプログラムは応答していません」と出てくるならば、どこかに必要以上の負荷をかけているとか、終了処理など、プログラムに間違いがあるのではないでしょうか。
Posted: 2005年5月30日(月) 21:51
by 広田
こんばんは、広田です。
私も昔に経験した事があります。
原因は通行人様のおっしゃるように、プログラムのミス(処置の甘さ)でした。
実行中の何かがあるのでしょうね。
実行中のものは、Sub MainWnd_Destroy()で閉じられる前に、
終了させておかなければいけません。
Posted: 2005年5月30日(月) 21:51
by mako20
やっぱり僕が書いた方法ではないと無理みたいですね
あと、広田さんのとおりプログラムに終了命令を渡せる状態にしないと、解決しない形になっちゃいますね
それに、誰でもコーディングミスでこういう形になることもよくありますから、自分でどこがバグなのかを考えるしかないと思いますね
Posted: 2005年5月31日(火) 00:16
by あおぞら
> そもそも、「このプログラムは応答していません」と出るのはプログラムの動作ではなく、
> Windowsの動作ですので、プログラム自体でどうかするものではないです。
> よって、そのようなコーディング方法はない、というのが答えとなります。
皆様コメントありがとうございます。「こんな事知らないのは私だけで、皆さんご存知だろうな」という思いからでしたが、お気を損ねてしまったのならお詫び致します。落ち着いてソースを確認します。
re:プログラムの強制終了
Posted: 2005年6月05日(日) 18:39
by あおぞら
皆さん、こんにちは。
まとまった量のデータ処理をしている途中のプログラムを、古のBREAKキーを押して強制終了させる如く、ウィンドウ右上のXマークを押しても「反応してません」と出てくるのが気に入らず、懊悩してました。
皆さんにアドバイスを頂き、「オフィシャルユーザーズガイド」の「マルチスレッド」の真似で、落ち着きました。
アドバイスありがとうございました。
-----------------------------
Dim status As long
Dim hThread As DWord
Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
Sub MainWnd_Destroy()
loop_DestroyObjects()
PostQuitMessage(0)
End Sub
Function DDD(hWnd As DWord) As DWord
Dim i As DWord
Dim hDC As DWord
Dim buffer0 As String
i=0
Do
SetWindowText(GetDlgItem(hMainWnd,Static1),Str$(i))
i=i+1
If i>100 Then
i=0
End If
if status=0 Then
Exit Do
End If
sleep(100)
Loop
ReleaseDC(hWnd,hDC)
CloseHandle(hThread)
End Function
Sub MainWnd_CommandButton1_Click()
Dim dwDummy As DWord
If status=0 Then
status=1
SetDlgItemText(hMainWnd,CommandButton1,"Stop")
hThread=CreateThread(ByVal 0,0,AddressOf(DDD),_
GetDlgItem(hMainWnd,Static1),0,VarPtr(dwDummy))
Else
status=0
SetDlgItemText(hMainWnd,CommandButton1,"Start")
End If
End Sub