我试图找到答案,但我没找到答案。
我想做这样的事情: 当我点击按钮时,我希望它重复动作,直到点击另一个按钮
我有这样的事情:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if(pole!=NULL){
pole->przesun_lidera(pole->wladca);
pole->rozstaw();
pole->rysuj_plansze();
}
}
我想在“if”中重复操作,直到我点击另一个按钮。
有人能告诉我,我怎么能实现这个目标?
答案 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 。按下第二个按钮将设置此信号量 / 等待对象,通知后台任务停止。有类似的方法,但这是问题的基础。