Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732

Вопрос о цикле

25.08.2011, 00:08. Показов 2073. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Элеметарный вопрос однако. Допустим один батон запускат цикл. Как вторым батоном прервать цикл запущенный первым?
Label и goto что ли?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.08.2011, 00:08
Ответы с готовыми решениями:

Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле считает заново?
Занялся сабжем по проекту. IDE Builder 2010 1) Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле...

Вопрос насчёт рекурсии в цикле
Здравствуйте. У меня вопрос насчёт рекурсии в цикле. Вот пример: int massiv={1,2,3}; int heapPermute(int n){ cout...

Перебрать в цикле все возможные комбинации: вопрос оптимизации кода
Здравствуйте! Задача следующая: есть несколько массивов. Пусть будет 5. Необходимо перебрать все возможные комбинации по 5 значений, каждое...

24
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
25.08.2011, 00:10
Flyer, создайте глобальную булеву переменную, инициализируйте false, на каждой итерации цикла проверяйте, не true ли переменная, вторая кнопка при нажатии ставит булеву переменную = true, цикл прерывается... PROFIT!!!
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.08.2011, 00:13
было на прошлой неделе.
в обработчик батона №2 пишем break;
в цикле ставим батон2->Клик(); и идем курить. за точность цитаты не ручаюсь .
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
25.08.2011, 01:42  [ТС]
iama, так немного не подходит
LK, гламурненько конечно, еще б работало и не говорило что брэйк не там где надо (Misplaced break) и в цикле не исполнялось то, что в обработчике клика без нажатия оного
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.08.2011, 02:26
поискал бы ту тему, да и место для брика заодно, не старый еще, небось, не ленивый

Добавлено через 4 минуты
может, там типа чего
C++
1
if(ButtonBreak->OnCkick) {breack;}
надо, а в ButtonBreak-OnCkick написать гламурненькое return;.

Добавлено через 12 минут
вот он, батонфакедбриккликбрик ... как можно аварийно завеншить программу - с такой формулировкий вы би никогда не нашли (это я про "аварийное завершение" ) ... сам и то - еле-еле ...
1
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
25.08.2011, 02:42  [ТС]
Хехе, спасибо. Завтра испробуем.

P.S. Ты меня конечно иногда удивляешь, LooK, но этим названием батона просто убил Батонфакедбрик епт :d
и да, я бы точно не искал батонфакедбрик при поиске решения своего вопроса.
P.P.S. Не старый, но ленивый.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.08.2011, 02:45
согласно рекомендациям, компонентам , переменным etc следует давать осмысленные, понятные имена, описывающие предназначение или цель выполняемых действий

не ленивый только ленивый
1
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
25.08.2011, 02:59  [ТС]
А если есть вложенный цикл:
C++
1
2
3
for(i=0; i<10;i++){
for(j=0; j<10;j++){
}}
то тогда тк что ли?:
C++
1
2
3
4
5
for(i=0; i<10;i++){
* if (Button->Click) break;
for(j=0; j<10;j++){
* if (Button->Click) break;
}}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.08.2011, 05:55
не забывайте, что есть еще такой оператор continue , позволяющий делать прыжки вольным стилем : Оператор continue
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
25.08.2011, 13:50  [ТС]
if(Button14->Click()) это дает ошибку мол войд в бул не не.
if(Button14->OnClick) break; и брэйк будет без нажатия оного батона
И еще, а паузу как?
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
25.08.2011, 14:27
Цитата Сообщение от Flyer Посмотреть сообщение
Допустим один батон запускат цикл. Как вторым батоном прервать цикл запущенный первым?
C++
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
bool pause=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
for(int i=0;;i++)
{
Application->ProcessMessages();
if(pause)break;
         Label1->Caption=i;
}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
      pause=1;
}
//---------------------------------------------------------------------------
1
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.08.2011, 10:44  [ТС]
Что-то я запутался и у меня ничего не выходит =/
NiTan, не подскажешь где в следующем коде нужно поставить брэйки:
C++
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
for(i=offset;i<StringGrid1->RowCount;i++)
{
ext=ExtractFileExt(StringGrid1->Cells[0][i])  ;
     if(ext==".mkv") {
     demuxer=" -demuxer mkv";}
     else  {
     demuxer=""; }
first_cmd=(" " +StringGrid1->Cells[3][i]+ demuxer +" -o \"" +StringGrid1->Cells[2][i]+"Temp.avi\" -vf scale=480:272,harddup -af channels=2 -ofps 25 -srate 44100 -oac faac -faacopts br=128:mpeg=4:object=2 -ovc x264 -ffourcc avc1 -x264encopts bitrate=410:me=umh:level_idc=13:keyint=250:frameref=1:bframes=0:threads=auto:profile=main:rc_lookahead=60:crf=21 -aspect 16:9 -mc 3 -subfont C://Windows//Fonts//arialbd.ttf -subpos 100 -subcp cpUnicode -subfont-text-scale 3");
 
path=StringGrid1->Cells[2][i];
 
 
if(DirectoryExists(path.c_str())==false){
 CreateDirectoryA (path.c_str(), NULL);  }
 
 
  CreatePipe(&read_stdout,&newstdout,&sa,0);
    unsigned long exit=0;
    unsigned long bread;
    unsigned long avail;
 
    GetStartupInfoA(&si);
    si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    si.hStdOutput = newstdout;
    si.hStdError = newstdout;
    a=1;
    CreateProcessA( "mencoder.exe", first_cmd.c_str(),   0,   0 ,   1,   CREATE_NEW_CONSOLE,     0,           0,           &si, &pi);
    UpdateWindow(Form1->Handle);
    for(;;)
    {
            GetExitCodeProcess(pi.hProcess,&exit);
 
        if (exit != STILL_ACTIVE)
        break;
 
 
 
    PeekNamedPipe(read_stdout,buf,1023,&bread,&avail,NULL);
    if (bread != 0)
    {
      bzero(buf);
      if (avail > 1023)
      {
 
        while (bread >= 1023)
        {
          ReadFile(read_stdout,buf,1023,&bread,NULL);
          Application->ProcessMessages();
          AnsiString str;
          str=buf;
        int pos1=str.Pos("f (");
        int pos2=str.Pos("%)");
        TryStrToInt(str.SubString(pos1+3,pos2-pos1-3),k)   ;
        if(k>a && k>0)
        {
        ((TGauge*)StringGrid1->Objects[1][i])->Progress=k;
        a=k;
        }
        bzero(buf);
        }
      }
      else
      {
 
        ReadFile(read_stdout,buf,1023,&bread,NULL);
        Application->ProcessMessages();
        AnsiString str;
        str=buf;
        int pos1=str.Pos("f (");
        int pos2=str.Pos("%)");
        TryStrToInt(str.SubString(pos1+3,pos2-pos1-3),k)   ;
        if(k>a && k>0)
        {
        ((TGauge*)StringGrid1->Objects[1][i])->Progress=k;
        a=k;
        }
 
      }
 
    }
 
 
  }
     ((TGauge*)StringGrid1->Objects[1][i])->Progress=100;
  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);
  CloseHandle(newstdout);
  CloseHandle(read_stdout);
}
offset=StringGrid1->RowCount;
А то я когда пробовал, то у меня то пайп переставал работать или не там где надо было прерывалось. Нубство в общем. Буду рад помощи
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
27.08.2011, 18:02  [ТС]
Сделал вроде, но файл не трется (доступ запрещен), хотя процесс его создавший и в него писавший был убит. Почему?Код:
C++
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
for(i=offset;i<StringGrid1->RowCount;i++)
{
ext=ExtractFileExt(StringGrid1->Cells[0][i])  ;
     if(ext==".mkv") {
     demuxer=" -demuxer mkv";}
     else  {
     demuxer=""; }
first_cmd=(" " +StringGrid1->Cells[3][i]+ demuxer +" -o \"" +StringGrid1->Cells[2][i]+"Temp.avi\" -vf scale=480:272,harddup -af channels=2 -ofps 25 -srate 44100 -oac faac -faacopts br=128:mpeg=4:object=2 -ovc x264 -ffourcc avc1 -x264encopts bitrate=410:me=umh:level_idc=13:keyint=250:frameref=1:bframes=0:threads=auto:profile=main:rc_lookahead=60:crf=21 -aspect 16:9 -mc 3 -subfont C://Windows//Fonts//arialbd.ttf -subpos 100 -subcp cpUnicode -subfont-text-scale 3");
 
path=StringGrid1->Cells[2][i];
 
if(DirectoryExists(path.c_str())==false){
 CreateDirectoryA (path.c_str(), NULL);  }
 
 
  CreatePipe(&read_stdout,&newstdout,&sa,0);
    unsigned long exit=0;
    unsigned long bread;
    unsigned long avail;
 
    GetStartupInfoA(&si);
    si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    si.hStdOutput = newstdout;
    si.hStdError = newstdout;
    a=1;
    CreateProcessA( "mencoder.exe", first_cmd.c_str(),   0,   0 ,   1,   CREATE_NEW_CONSOLE,     0,           0,           &si, &pi);
    UpdateWindow(Form1->Handle);
    for(;;)
    {
            GetExitCodeProcess(pi.hProcess,&exit);
 
        if (exit != STILL_ACTIVE)
        break;
 
/////////////////////////////
    if(stop){
  ((TGauge*)StringGrid1->Objects[1][i])->Progress=0;
  break;
    }
 /////////////////////////////////
    PeekNamedPipe(read_stdout,buf,1023,&bread,&avail,NULL);
    if (bread != 0)
    {
      bzero(buf);
      if (avail > 1023)
      {
 
        while (bread >= 1023)
        {
          ReadFile(read_stdout,buf,1023,&bread,NULL);
          Application->ProcessMessages();
          AnsiString str;
          str=buf;
        int pos1=str.Pos("f (");
        int pos2=str.Pos("%)");
        TryStrToInt(str.SubString(pos1+3,pos2-pos1-3),k)   ;
        if(k>a && k>0)
        {
        ((TGauge*)StringGrid1->Objects[1][i])->Progress=k;
        a=k;
        }
        bzero(buf);
        }
      }
      else
      {
 
        ReadFile(read_stdout,buf,1023,&bread,NULL);
        Application->ProcessMessages();
        AnsiString str;
        str=buf;
        int pos1=str.Pos("f (");
        int pos2=str.Pos("%)");
        TryStrToInt(str.SubString(pos1+3,pos2-pos1-3),k)   ;
        if(k>a && k>0)
        {
        ((TGauge*)StringGrid1->Objects[1][i])->Progress=k;
        a=k;
        }
 
      }
 
    }
 
 
  }
  if(stop)
  {
    TerminateProcess(pi.hProcess,0);
  CloseHandle(newstdout);
  CloseHandle(read_stdout);
   stop=false;
   offset=i;
  AnsiString temp1=path+"Temp.avi" ;
 if(FileExists(temp1.c_str())) {
 if(remove( temp1.c_str() )!= 0 )
    ShowMessage(strerror(errno));}
      break;
  }
     ((TGauge*)StringGrid1->Objects[1][i])->Progress=100;
  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);
  CloseHandle(newstdout);
  CloseHandle(read_stdout);}
}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
28.08.2011, 05:11
"файл не трется" - очень доходчивое объяснение вашей проблемы при полном отсутствии комментариев как в коде, так и "от себя", любимого.
для того, чтобы ответить на ваш вопрос, необходимо:
1. создать проект;
2. воспроизвести ваш код, угадывая "темные места", в частности, что такое path, доступен ли файл вообще и не в системной ли он директории.

Теперь вопрос у меня: кому это надо ?
2
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
28.08.2011, 13:01  [ТС]
Извини.
path это есть путь к папке, не системной, допустим y:\wtf\. Файл y:\wtf\Temp.avi существует и прибивания процесса и цикла показаного в коде, ручками он стирается, но вот программа выдает permission denied.
Собственно вопрос, почему ручками он трется , а при попытке сделать програмно - я получаю permission denied?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
28.08.2011, 16:53
видимо, потому, что он все еще обрабатывается вашей программой - присмотритесь к своим процессам, может, сначала стоит какой-нибудь завершить, а потом уже удалять освободившийся файл
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
28.08.2011, 17:00  [ТС]
Дык,
Создал процесс, который файл создал с ним работал:
C++
1
 CreateProcessA( "mencoder.exe", first_cmd.c_str(),   0,   0 ,   1,   CREATE_NEW_CONSOLE,     0,           0,           &si, &pi);
Завершил:
C++
1
 TerminateProcess(pi.hProcess,0);
Больше с тем файлом ничего не работает
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
03.09.2011, 19:46  [ТС]
Ап Вопрос до теперь не решен =/
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.09.2011, 19:57
а кто его должен был решить ?
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
04.09.2011, 01:21  [ТС]
Я, кто же еще.Но, я был бы не против подсказки в его решении. Наверное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.09.2011, 01:21
Помогаю со студенческими работами здесь

Как програмно в цикле не доходя до конца, пропустить шаг в цикле?
Как програмно в цикле не доходя до конца, пропустить шаг в цикле?

При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти
При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти. Что не так и как правильно сделать? Не пинайте нуба! ...

Переменная, которая только что использовалась в цикле в качестве счётчика в следующем цикле не используется
Помогите, пожалуйста. Вот отрывок программы (программа целиком- в архиве): procedure TForm1.Button1Click(Sender: TObject); begin ...

Вопрос по SetParent (поэтому, наверное, это вопрос к NickStaves)
Есть набор форм, назовём их 'интерфейсными'. Есть отдельная форма, назовём её 'хранилищем'. Сама по себе она нигде не используется: лишь...

VBulletin [ВОПРОС]: Меню и вопрос при регистрации
Помогите пожалуйста. У меня vbulletin 4.0.7 и после установки в верхнем меню есть лишняя навигация. Например: Главная Форум Blogs ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru