Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. К примеру простенькая программа, что-то читает в цикле или обрабатывает и в этот момент пользователю надоело ждать или передумал, короче нажал в правом верхнем углу окна, крестик "закрыть окно". Дайте пожалуйста примерчик кода, где цикл прерывается пользователем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:16 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Если вкратце - то вычисления не запускают в стеке WindowProc. Надо переписать приложение по другому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:26 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Программа какая? Консольная? Оконная? Для консольной SetConsoleCtrlHandler() Для оконной обрабатывай сообщение WM_CLOSE. Только чтобы оно обработалось - твой цикл считания надо в отдельный поток вынести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:26 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
программка для Win XP оконная, очень простенькая Мне надо уметь обрабатывать действия пользователя, например закрыть программу в момент выполнения (скажем чтения большущего текстового файла) Пожалуйста дайте пример кода по-проще или ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:34 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
S0ME0NEПожалуйста дайте пример кода по-проще Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:41 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovтут нет анализа что именно пользователь прервал выполнение программы и к тому meyton советует как-то по другому делать обработки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:45 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
В двух словах не расскажешь. Рабочий поток всегда лдолжен быть свободен чтобы обрабатывать сообщения от виндовса, поэтому долгоиграющие рассчеты надо выносить в отдельный поток. _beginthreadex() создает поток, там же внизу пример. PS Лучше книжку какую-нибудь прочитай про WinAPI для работы с потоками, синхронизацию потоков, про очередь сообщений и оконные сообщения. Подводных камней много при многопоточности, все не расскажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:48 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Dima TБлагодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:53 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
S0ME0NEпрограммка для Win XP оконная, очень простенькая Мне надо уметь обрабатывать действия пользователя, например закрыть программу в момент выполнения (скажем чтения большущего текстового файла) Пожалуйста дайте пример кода по-проще или ссылку. Она и так это умеет делать. Её для этого не нужно отдельно как-то обучать. Как только закончится долгий расчёт, программа получит соотв. сообщение и, обработав его, закроется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:54 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Почитай Рихтера . Главы 6-9, 26. А лучше целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 12:58 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Dima TВ двух словах не расскажешь. Рабочий поток всегда лдолжен быть свободен чтобы обрабатывать сообщения от виндовса, поэтому долгоиграющие рассчеты надо выносить в отдельный поток. _beginthreadex() создает поток, там же внизу пример. PS Лучше книжку какую-нибудь прочитай про WinAPI для работы с потоками, синхронизацию потоков, про очередь сообщений и оконные сообщения. Подводных камней много при многопоточности, все не расскажешь. Есть другой метод -- дискретизация расчётов. Алгоритм сложного действия разбирается на кусочки, так, чтобы в любой момент можно было бы вызвать какую-то функцию и выполнить следующий кусок работы. При этом как правило нужно отдельно сохранять состояние этого алгоритма. Затем по какому-то событию (в Windows-приложениях всё по событиям) запускается этот процесс, затем устанавливается таймер или себе самому посылается (PostMessage) какое-то сообщение, и на этом сообщении (или на таймере) обрабатывается следующий кусочек алгоритма. И так по кругу, пока всё не обработается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 13:00 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
MasterZivЕсть другой метод -- дискретизация расчётов. Алгоритм сложного действия разбирается на кусочки, так, чтобы в любой момент можно было бы вызвать какую-то функцию и выполнить следующий кусок работы... ИМХУ изврат это, код сильно усложняется только ради того чтобы его можно было прервать, а интерфейс все-равно тупит (пользователь думает что прога глючная), т.к. сообщения с запаздыванием обрабатываются. Гораздо проще вынести долгоиграющий код в отдельный поток и навтыкать проверки флага принудительного прерывания, так чтобы гарантированно остановился за 1-2 секунды. Для языков без многопоточности приходится иногда так делать, но тут не этот случай. Обычно достаточно воткнуть индикатор выполнения расчета, чтобы пользователь не нервничал что все "повисло". Некоторые avi-шку с прогрессбаром показывают: и считать не надо и юзер видит что прога работает )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 13:13 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
а как же тогда работает команда DoEvents на vb6, после которой можно анализировать глоб. переменные влияющие на выполнение программы например событие Form_Close() Код: vbnet 1. 2. 3. а в процедуре где длительный цикл Код: vbnet 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 13:30 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
S0NE0NEтут нет анализа что именно пользователь прервал выполнение программы А кто ещё способен установить переменную StopNow в true по-твоему?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 13:31 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
S0ME0NEа как же тогда работает команда DoEvents на vb6, после которой можно анализировать глоб. переменные влияющие на выполнение программы... VB тут при чем? там несколько потоков средствами VB сделаны: один считает, другой с виндовсом общается. С помощью DoEvents первый опрашивает второй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 13:37 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovS0NE0NEтут нет анализа что именно пользователь прервал выполнение программы А кто ещё способен установить переменную StopNow в true по-твоему?.. наверное как-то так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 13:46 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Dima T, только ты путаешь термины. Рабочий поток - Worker Thread это как раз тот который занят вычислениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 14:15 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
maytonDima T, только ты путаешь термины. Рабочий поток - Worker Thread это как раз тот который занят вычислениями. Исправлюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 14:23 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivЕсть другой метод -- дискретизация расчётов. Алгоритм сложного действия разбирается на кусочки, так, чтобы в любой момент можно было бы вызвать какую-то функцию и выполнить следующий кусок работы... ИМХУ изврат это, код сильно усложняется только ради того чтобы его можно было прервать, а интерфейс все-равно тупит (пользователь думает что прога глючная), т.к. сообщения с запаздыванием обрабатываются. Гораздо проще вынести долгоиграющий код в отдельный поток и навтыкать проверки флага принудительного прерывания, так чтобы гарантированно остановился за 1-2 секунды. Для языков без многопоточности приходится иногда так делать, но тут не этот случай. Обычно достаточно воткнуть индикатор выполнения расчета, чтобы пользователь не нервничал что все "повисло". Некоторые avi-шку с прогрессбаром показывают: и считать не надо и юзер видит что прога работает )) Это не изврат, а нормальная техника. Код не усложняется, а упрощается, потому что при таком подходе он остаётся однопоточным, и тогда не нужно организовывать синхронизацию доступа к переменным. Это по-любому проще, чем многопоточный код. Про запаздывания -- надо делать части алгоритма маленькими и предсказуемыми по времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 15:28 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
MasterZivне нужно организовывать синхронизацию доступа к переменным. Это по-любому проще, чем многопоточный код. Если главный поток не трогает переменные, то и доступ к ним синхронизировать не нужно. В особенности если эти переменные - локальные. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 15:45 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто не изврат, а нормальная техника. Код не усложняется, а упрощается, потому что при таком подходе он остаётся однопоточным, и тогда не нужно организовывать синхронизацию доступа к переменным. Это по-любому проще, чем многопоточный код. Про запаздывания -- надо делать части алгоритма маленькими и предсказуемыми по времени. Надо смотреть что у него там за код. Есть класс алгоритмов (рекурсия) которые трудно выдернуть из контекста исполнения и трудно отдать маркер управления наверх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 15:52 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMasterZivне нужно организовывать синхронизацию доступа к переменным. Это по-любому проще, чем многопоточный код. Если главный поток не трогает переменные, то и доступ к ним синхронизировать не нужно. В особенности если эти переменные - локальные. Как минимум две переменные не могут не трогаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 16:23 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
MasterZivКак минимум две переменные не могут не трогаться. Какие? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 17:39 |
|
||
|
Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?
|
|||
|---|---|---|---|
|
#18+
S0ME0NEнаверное как-то так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Все верно. Только после надо дождаться пока рабочий поток ее прочитает и завершится. Про потоки я тут пример выложил . Тебе тоже пригодится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 18:10 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38775081&tid=2019272]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 18ms |
| total: | 197ms |

| 0 / 0 |
