powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Цикл в С++В....
7 сообщений из 7, страница 1 из 1
Цикл в С++В....
    #32354290
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В программе реализован продолжительный цикл, как сделать чтоб можно было его прервать.
Наприер хочу чтоб при нажатии "Alt+q", он останавливался.

Как определить нажаты ли клавиши или нет?
...
Рейтинг: 0 / 0
Цикл в С++В....
    #32354390
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь делать его в потоке ...
____
...
Рейтинг: 0 / 0
Цикл в С++В....
    #32354480
Alexey M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если ты в свой цикл вставишь вот такой блок, то приложении будет реагировать на все сообщения и события системы:


MSG msg;
while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
{
if ( !PumpMessage( ) )
{
bDoingBackgroundProcessing = FALSE;
::PostQuitMessage( );
break;
}
}
// let MFC do its idle processing
LONG lIdle = 0;
while ( AfxGetApp()->OnIdle(lIdle++ ) );
...
Рейтинг: 0 / 0
Цикл в С++В....
    #32354949
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вас спасет Application->ProcessMessages(); :-)))
Специально для проверки написал програмку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
// ---------------------------------------------------------------------------
 

#include <vcl.h>
#pragma hdrstop

#include  "Unit1.h" 
// ---------------------------------------------------------------------------
 
#pragma package(smart_init)
#pragma resource  "*.dfm" 
TForm1 *Form1;
// ---------------------------------------------------------------------------
 
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
// ---------------------------------------------------------------------------
 

bool fl = true;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int h =  0 ;

  while (fl)
  {
    h++;
    if (h> 1000000 ) h =  0 ;
    Application->ProcessMessages();
    Label1->Caption = IntToStr(h);
  }
}
// ---------------------------------------------------------------------------
 

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  fl = false;
  Form1->Close();      
}
//---------------------------------------------------------------------------

Все прекрасно работает.
Прога написана на BCB6
...
Рейтинг: 0 / 0
Цикл в С++В....
    #32355179
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как проверить нажата ли клавиша или нет.

А то я сделал на подобие этого

пр-рр: Cauchy

но программа долго находится в цикле (пишет в БД и м.др.), и поймать когда она даст нажать на кнопку почти невозможно.
Проще дождаться окончания цикла. Вот еслиб нажать и удержать кнопку на клаве, то вариант приемлемый.


А почаще делать проверку на отмену не могу, чтоб не нарушить целостность функции.
...
Рейтинг: 0 / 0
Цикл в С++В....
    #32355212
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделал вот так (ввел задержку на 3 секунды):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int h =  0 ;
  fl = true;
  while (fl)
  {
    h++;
    if (h> 1000000 ) h =  0 ;
    Sleep( 3000 );                           // < --- Тут
 
    Label1->Caption = IntToStr(h);
    Application->ProcessMessages();
  }
  Label1->Caption = IntToStr(h)+ "sdfsd" ;
}

void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
  if (Key == 'h') fl = false;
}

И так тоже работает. Прерывается не сразу, а когда переходит на условие цикла
...
Рейтинг: 0 / 0
Цикл в С++В....
    #32355266
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cauchy

Огромное спасибо.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Цикл в С++В....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]