Проверка, была ли нажата какая-либо другая кнопка - PullRequest
1 голос
/ 05 августа 2011

Я пытался найти ответ, но не нашел его.

Я хочу сделать что-то вроде этого: когда я нажимаю кнопку, я хотел бы, чтобы он повторял действия, пока не нажата другая кнопка

У меня есть что-то вроде этого:

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

, и я хочу повторить действия в «если», пока я не нажму другую кнопку.

Может кто-нибудь сказать мне, как я могудостичь этого?

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Я думаю, у вас есть две возможности здесь. Одним из них является создание потока и выполнение вашего кода в нем, пока не будет установлено условие, заданное другой кнопкой. Другая возможность - разрешить насосу сообщений обрабатывать сообщения, находясь внутри цикла, вызывая 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;
}
0 голосов
/ 05 августа 2011

Вам понадобится функция, которая выполняется в «фоне».

Windows - это система, управляемая событиями. Ваши функции активируются только тогда, когда Windows получает событие. Насколько я понимаю, вы хотите, чтобы что-то происходило в ожидании определенного события (нажатие кнопки). Это время между событиями является "фоновым" временем.

Одна из идей состоит в том, чтобы Windows выполняла вашу функцию в ожидании. Поищите в сети «Windows spin wait». Это даст вам информацию о том, как «привязать» функцию к фону или циклу ожидания ожидания.

Вы также можете создать другой поток в качестве фоновой задачи. Сделайте, чтобы ваша первая кнопка нажала, чтобы включить фоновый поток. Фоновый поток будет выполняться до тех пор, пока не будет установлен семафор или объект ожидания . Второе нажатие кнопки установит этот семафор / объект ожидания , сообщая фоновой задаче об остановке. Существуют похожие методы, но это является основой проблемы.

...