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

Как определить нажаты ли клавиши или нет?
...
Рейтинг: 0 / 0
16.12.2003, 18:01
    #32354390
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в С++В....
Можешь делать его в потоке ...
____
...
Рейтинг: 0 / 0
16.12.2003, 19:16
    #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
17.12.2003, 11:27
    #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
17.12.2003, 13:11
    #32355179
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в С++В....
а как проверить нажата ли клавиша или нет.

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

пр-рр: Cauchy

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


А почаще делать проверку на отмену не могу, чтоб не нарушить целостность функции.
...
Рейтинг: 0 / 0
17.12.2003, 13:24
    #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
17.12.2003, 13:47
    #32355266
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в С++В....
Cauchy

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


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