一生懸命動いてるプログラムを、強制終了したくなる時があります。Xマークを押すと「このプログラムは応答していません」と
出てきますが、サクッと強制終了させる為の、お約束のコーディ
ングをご教示頂きたく。
Win XP Pro+AB3
プログラムの強制終了
> コメントありがとうございました。私の設問の仕方が悪かったようで
> すね。ウインドウの右上のX印をクリックすると、後腐れなく終了して
> くれるようなコーディングがあるのではないかな?という事でした。
> ループの中にトラップを入れて等々
そもそも、「このプログラムは応答していません」と出るのはプログラムの動作ではなく、
Windowsの動作ですので、プログラム自体でどうかするものではないです。
よって、そのようなコーディング方法はない、というのが答えとなります。
タスクマネージャのように、動いているプロセスを他のソフトから
強制終了させるという場合はまた話が違ってきますが。
それとは別に、
>サクッと強制終了させる為の、お約束のコーディングをご教示頂きたく。
揚げ足となってしまいますが、このように「何かあるんだろ?教えろよ」
的な書き方をしては協力的な回答は得られないと思います。
> すね。ウインドウの右上のX印をクリックすると、後腐れなく終了して
> くれるようなコーディングがあるのではないかな?という事でした。
> ループの中にトラップを入れて等々
そもそも、「このプログラムは応答していません」と出るのはプログラムの動作ではなく、
Windowsの動作ですので、プログラム自体でどうかするものではないです。
よって、そのようなコーディング方法はない、というのが答えとなります。
タスクマネージャのように、動いているプロセスを他のソフトから
強制終了させるという場合はまた話が違ってきますが。
それとは別に、
>サクッと強制終了させる為の、お約束のコーディングをご教示頂きたく。
揚げ足となってしまいますが、このように「何かあるんだろ?教えろよ」
的な書き方をしては協力的な回答は得られないと思います。
re:プログラムの強制終了
皆さん、こんにちは。
まとまった量のデータ処理をしている途中のプログラムを、古の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
まとまった量のデータ処理をしている途中のプログラムを、古の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