wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732

Функция и break

25.09.2011, 23:48. Показов 6974. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru