1

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

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

我有这样的事情:

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

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

有人可以告诉我,我怎样才能做到这一点?

4

2 回答 2

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;
}
于 2011-08-05T18:52:12.423 回答
0

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

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

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

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

于 2011-08-05T18:44:49.137 回答