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

Функция и break

25.09.2011, 23:48. Показов 6849. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно есть у меня некий код ( он не интересен), который я решил сделать функцией. Функцию так уж сложилось я пробую создать впервые. Ну и вот столкнулся с проблемой - кусок кода, который я решил сделать функцией находится в цикле. Цикл этот можно перервать нажатием на батон (присваиванием булевой переменной тру и проверки оной в цикле, ну и там некие действия и брейк. Но если написать в реализации или как оно называется функции этот кусок с брейк, вполне ожидаемо misplaced break. Как с этим бороться?


а, и еще 1 вопросик. Создаются временные файлы с именами temp.* (их несколько) , которые сохраняются в папке, где должен быть конечный файл, ну и когда конечный файл создан, то удаляются. Проблема в том, что иногда они удаляются нормально, а иногда почему то нет. Вот почему они могут не удалятся?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.09.2011, 23:48
Ответы с готовыми решениями:

While{switch{switch{break;}}} break выходит из while
В общем необходимо конструкцию switch запускать в цикле, в каждом case X: стоит свой break;, да бы выполнился один case, а не все. Проблема...

if(){break;}
Помогите разобраться с действием break в MFC for(int i=0;i<8;i++){ if(i==3){break;} }

Использование break;
Всем привет, объясните пожалуйста, человеческим языком, такой пример из php. ‹html› ‹head› ‹title›Особенности оператора...

31
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 22:19  [ТС]
Студворк — интернет-сервис помощи студентам
Ну как по мне то рандомно. Тоесть, допустим поставим в очередь один и тот же файл пусть 3 раза. Вот иногда все три раза все трется норм, а иногда не трется в одном случае, файл или 2 или 3. Как по мне , то рандом полнейший

Насчет второй проблемы я есть предположения? Если добавим один файл, запустим конвертацию, она закончится, решим добавить второй и нажмем кнопку запуска, то все будет гуд. Но если мы запустим И прервем, то при нажатии на кнопку запуска больше ничего не произойдет. У меня например нету предположений, почему так
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.09.2011, 00:12
естественно, посколку ты там все удаляешь и чистишь: TerminateProcess(pi.hProcess, 0); и пр., более наглядный пример:
C++
1
2
3
4
5
TPrimer *primer;
primer = new TPrimer;
ShowMessage(primer);
delete primer;
ShowMessage("Какой нафиг "+primer+" ?");
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
27.09.2011, 00:14  [ТС]
пример правда наглядный выход?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.09.2011, 00:58
я не знаю, как там у вас это чудо организовано
но - не автоматически же оно работает, что-нибудь этим всем да управляет - наглядный пример с кнопками:
C++
1
2
3
4
5
6
7
8
TPrimer *primer;
// ...
// ButtonShow->Click()
primer = new TPrimer;
ShowMessage(primer);
//...
// ButtonDelete->Click()
delete primer;
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
27.09.2011, 01:00  [ТС]
ммм. скину сpp. Поможешь разобраться ?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.09.2011, 01:26
может, так разберемся...
при каком событии вызывается функция enc(UnicodeString first_cmd, int i) ? при старте программы, при нажатиии на кнопку - как ?
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
27.09.2011, 01:29  [ТС]
в цикле при нажатии на кнопку. То есть, допустим цикл сделает 5 итераций -> функция будет вызвана 5 раз.

п.с. с цпп было б легче думаю тебе даже лс кст не написать =/
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.09.2011, 01:36
я так понимаю, stop вызывается тоже нажатием на кнопку ?
что мешает вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
((TGauge*)StringGrid1->Objects[1][i])->Progress = 0;
TerminateProcess(pi.hProcess, 0);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(newstdout);
CloseHandle(read_stdout);
working = false;
offset = i;
UnicodeString temp1 = path + "Temp.avi";
DeleteFile(temp1.w_str());
повесить на кнопку вместо stop ?
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
27.09.2011, 01:40  [ТС]
Да, нажатием на батон стоп ставится тру. Мешает то, что 2,3 и 4 вызовы ( я расказыаал о них выше) не юзают пайпы, то есть нема хендлов чтоб закрывать, файлы у них с другими именами и прогресс в гаужей должен ставится другой
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.09.2011, 02:09
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
void __fastcall TForm1::enc(UnicodeString first_cmd, int i)
{
  CreatePipe(&read_stdout, &newstdout, &sa, 0);
  unsigned long exit = 0;
  unsigned long bread;
  unsigned long avail;
 
  GetStartupInfo(&si);
  si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
  si.wShowWindow = SW_HIDE;
  si.hStdOutput = newstdout;
  si.hStdError = newstdout;
  a = 1;
  if (stop==false) {
    CreateProcess(L"mencoder.exe", first_cmd.w_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();
            UnicodeString 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();
          UnicodeString 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);
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(newstdout);
    CloseHandle(read_stdout);
///////////////////////////////////////
  else if (stop==true) {
    TerminateProcess(pi.hProcess, 0);
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    CloseHandle(newstdout);
    CloseHandle(read_stdout);
    stop = false;
    working = false;
    offset = i;
    UnicodeString temp1 = path + "Temp.avi";
    DeleteFile(temp1.w_str());
    ((TGauge*)StringGrid1->Objects[1][i])->Progress = 0;
    break;
  } 
///////////////////////////////////////
}
Добавлено через 16 минут
наверное, процес все же стоило создать, а то убивать будет нечего
C++
1
2
3
4
5
6
  a = 1;
  CreateProcess(L"mencoder.exe", first_cmd.w_str(), 0, 0, 1,
                CREATE_NEW_CONSOLE, 0, 0, &si, &pi);
  UpdateWindow(Form1->Handle);
  if (stop==false) {
    for (; ;) {
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
27.09.2011, 10:01  [ТС]
что то я не понял твоей логики. Зачем этот иф вообще ?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.09.2011, 14:37
а просто проверить не пробовал?
логика такая - создаем процесс , при нажатии той кнопки проверяем состояние "стоп" - если ложь - віполянем цикл (т.е., работаем), если "ложь" - подчищаем за собой и прерываем цикл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2011, 14:37
Помогаю со студенческими работами здесь

Заменить break
здравствуйте. помогите разобраться. нужно заменить break в теле цикла(точнее от него избавиться), но чтобы алгоритм программы остался таким...

Кнопка break
у меня ноутбук dell .... нужна кнопка break а ее ни где нету...подскажите где ее найти либо какие сочитания клавишь эмулируют ее......

Break 2х циклов
Всем привет, есть цикл a и цикл b, который находиться в цикле а, можно ли как-то одной строкой из цикла б остановить выполнение сразу двух,...

Break и Exit
Break; - это функция выхода из цикла, при чем если за этим цикл по строкам кода стоит еще какой-то другой цикл то следующий цикл уже будет...

Misplaced break
#include<stdio.h> #include<conio.h> main() { clrscr(); int a; scanf("%i",&a); switch (a); { ...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru