初めて利用させていただきます。
Win2000 VC++6.0 MFC ダイアログベース
なのですが、ボタンを押した際にforループを実行するようにしています。
forの条件に合うまで待てば問題なく終了できるのですが、
途中で終了する方法を探しています。
以下のようにキーボードを押せばbreakで抜けようとしたのですが、
なぜかキーボードを押すと逆に終わらなくなり、強制終了でないと終わらなくなってしまいま
す。
void CTestDlg::OnButton1()
{
for(n=0;n<100000000;n=n+1)
{ x = x + 1;
x = x * 2;
x = x / 2;
}
m_mozi.SetWindowText(終了);
UpdateData();
}
すいません。途中で送信してしまいました。
初めて利用させていただきます。
Win2000 VC++6.0 MFC ダイアログベース
なのですが、ボタンを押した際にforループを実行するようにしています。
forの条件に合うまで待てば問題なく終了できるのですが、
途中で終了する方法を探しています。
以下のようにキーボードを押せばbreakで抜けようとしたのですが、
なぜかキーボードを押すと逆に終わらなくなり、強制終了でないと終わらなくなってしまいま
す。
ボタンを押す、またはキーボードを押したら終了できる方法を教えてもらえませんでしょうか?
よろしくお願いします。
void CTestDlg::OnButton1()
{
for(n=0;n<1000;n=n+1)
{
*
*
*
if (_kbhit()) break;
}
}
スレッドを使ってはいかがでしょうか。
// ごく簡単な例
// ボタン1を押すとスレッド(func)がスタート
// ボタン2を押すとスレッドが停止
// CreateThreadなどもある。
#include <process.h>
void func( void* pObj )
{
CTestDlg* pDlg = ( CTestDlg* )pObj;
while( pDlg->m_bContinue )
{
;
}
pDlg->MessageBox( finised, thread );
}
void CTestDlg::OnButton1()
{
m_bContinue = true;
_beginthread( func, 0, this );
}
void CTestDlg::OnButton2()
{
m_bContinue = false;
}
m_bContinue は volatile にしとかんとあかんな。
for分の中にPeekMessageを入れれば
イイと思います。
をよよさん、...さん、NEGさん、冬夜さん、返信ありがとうございます。
説明が足りませんでした。
使用目的は実験装置の動作に使用して、forで目的の回数繰り返す。
その際に異常が起きた際に途中で止める、といのが目的だったのでforはやめれないのです。
CProgressDlgは試したことなく、PeekMessageは聞いた事もなかったです・・・
勉強して、また成功したら報告させてもらいます。
なにかあった時に、繰り返し処理を終了するのではなく、中断させるということです
ね。
こだわるわけではありませんが、スレッドでもこんなふうにすればできないことはあり
ませんよ。
あくまでもお試し用のコードですが、応用は可能と思われます。
#include <process.h>
void func( void* pObj )
{
CTestDlg* pDlg = ( CTestDlg* )pObj;
for( int i = 0; i < 1000; ++i )
{
::Sleep( 2 );
if( !pDlg->m_bContinue )
{
char msg[ 100 ];
sprintf( msg, break at %d, i );
pDlg->MessageBox( msg, thread );
pDlg->m_bContinue = true;
}
}
pDlg->MessageBox( finised, thread );
}
void CTestDlg::OnButton1()
{
m_bContinue = true;
_beginthread( func, 0, this );
}
void CTestDlg::OnButton2()
{
m_bContinue = false;
}
> m_bContinue は volatile にしとかんとあかんな。
ですね。大事なコメントありがとうございました。 > ...さん
をよよさん、ありがとうございます。
試してみましたが、まさにこの機能でした。
プログラムもシンプルで、これならすぐ応用して作れそうです。
丁寧な説明本当にありがとうございました。