检查是否单击了任何其他按钮

时间:2011-08-05 18:12:21

标签: c++ button c++builder c++builder-6

我试图找到答案,但我没找到答案。

我想做这样的事情: 当我点击按钮时,我希望它重复动作,直到点击另一个按钮

我有这样的事情:

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    if(pole!=NULL){
            pole->przesun_lidera(pole->wladca);
            pole->rozstaw();
            pole->rysuj_plansze();
    }
}

我想在“if”中重复操作,直到我点击另一个按钮。

有人能告诉我,我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:2)

我认为你有两种可能性。一种是创建一个线程并在其中执行代码,直到设置了由另一个按钮设置的条件。另一种可能性是允许消息泵在循环内部通过调用ProcessMessages()来处理消息,例如

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    condition = false;
    while( !condition && pole!=NULL){
            pole->przesun_lidera(pole->wladca);
            pole->rozstaw();
            pole->rysuj_plansze();
            Application->ProcessMessages();
            Sleep(1); // don't be a processor hog
    }
}

void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
    condition = true;
}

答案 1 :(得分:0)

您需要具有在“背景”中执行的功能。

Windows是一个事件驱动的系统。只有在Windows收到事件时才会激活您的功能。我的理解是,您希望在等待特定事件(按下按钮)时发生某些事情。事件之间的这段时间是“背景”时间。

一个想法是让Windows在等待时执行您的功能。在网上搜索“Windows旋转等待”。这将为您提供有关如何将函数“挂钩”到后台或旋转等待循环的信息。

您可能还想创建另一个线程作为后台任务。让您的第一个按钮单击打开后台线程。后台线程将一直执行,直到设置了信号量 wait-object 。按下第二个按钮将设置此信号量 / 等待对象,通知后台任务停止。有类似的方法,但这是问题的基础。