|
2 / 2 / 1
Регистрация: 24.03.2010
Сообщений: 121
|
|||||||||||
Принудительный выход из цикла - отдельный поток или другое решение?13.10.2011, 19:41. Показов 5156. Ответов 27
Метки нет (Все метки)
Visual Studio 2008 SP1, диалоговый проект MFC.
В таблицу загружаются данные (цикл примерно из 9000 проходов). Операция занимает не 1 минуту. Нужно каким-то способом останавливать процесс загрузки (например, по нажатию клавиши Esc). Но пока идет заполнение таблицы, окно программы не принимает никакие сообщения. Как лучше это реализовать? Пробовал создавать отдельный поток (до этого с многопоточностью не работал, поэтому плохо в них разбираюсь).
C2248: 'CTablicaDlg::FillGrid' : cannot access protected member declared in class 'CTablicaDlg'. C2352: 'CTablicaDlg::FillGrid' : illegal call of non-static member function. Собирался по нажатию Esc присвоить переменной цикла значение 9000, что остановило бы цикл. Гугление ни к чему не привело. Точнее нашел кое-что:
0
|
|||||||||||
| 13.10.2011, 19:41 | |
|
Ответы с готовыми решениями:
27
Принудительный выход из цикла Принудительный выход из цикла for Принудительный выход из цикла |
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
|||||
| 13.10.2011, 23:03 | |||||
|
здесь он говорит что метод только для наследников (protected member) и снаружи класса не достучатся дай отдохнуть процессору Добавлено через 2 минуты можно попробовать переопределить IsIdle и в ней заполнять структуру она будет вызыватся когда очередь сообщений у окна пуста
0
|
|||||
|
2 / 2 / 1
Регистрация: 24.03.2010
Сообщений: 121
|
|
| 13.10.2011, 23:17 [ТС] | |
|
ValeryS, если sleep(100) поставить, то время выполнения увеличится на 900 секунд) попробую CTablicaDlg *pDlg = (CTablicaDlg *)Param и еще поковыряться. Спасибо за ответ
0
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
|
| 13.10.2011, 23:21 | |
|
поставь sleep(10) sleep(5)
главное дать процессору отвлечься от твоего цикла
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
||
| 13.10.2011, 23:48 | ||
|
хм, а не проще ли использовать winAPI поместив в цикл функцию которая проверяет и достает из стэка сообщений если таковое имеется и дальнейшая обработка данного сообщения сообщение может быть любое, пусть то будет клавиша ESC или еще что-то , так же можно ограничить обработку сообщения если только будет нажата нужная кнопка. Функция- PeekMessage()
Добавлено через 1 минуту даже если дать дополнительный поток, тогда эта задержка также никчему)
0
|
||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
|
| 13.10.2011, 23:58 | |
|
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
||
| 14.10.2011, 00:00 | ||
|
0
|
||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
||
| 14.10.2011, 00:04 | ||
|
я говорю о ресурсоемких потоках которые могут захватить процессор (зависит и от приоритета) и другой поток будет вызываться неравномерно с задержками а слип это исправляет(сталкивался не один раз)
0
|
||
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 14.10.2011, 00:15 | |
|
скачки между потоками происходят не равномерно по определению))))
в любом случае задержка не для данных целий необходима и создавалась.ИМХО это не грамотное решение на худой конец вставить в конец или начало цикла какой нибудь if который бы проверял нажали ли кнопкуу или нет, но ни как не создавать для данной задачи два потока и вставлять задержки в ресурсоемкий цикл.
0
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
||||
| 14.10.2011, 00:37 | ||||
|
например чтение с ком порта??? Добавлено через 3 минуты если поток захватит процессор тут и перерисовка тормознет и другие приложения подвиснут (никогда не сталкивался?)
0
|
||||
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
||
| 14.10.2011, 01:01 | ||
|
а задержкой ты увеличиваешь и так большое время обработки... а для чтения с ком порта-то зачем два потока?)
0
|
||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
||
| 14.10.2011, 01:06 | ||
|
программа повисла а если в одном потоке чтение а в другом управление то все путем это не только с комом это и с интернетом может быть
0
|
||
| 14.10.2011, 02:18 | ||
|
Не по теме:
http://www.robbayer.com/files/serial-win.pdf и вообще в оффтоп уже ушли))
1
|
||
| 14.10.2011, 14:50 | |
|
0
|
|
| 14.10.2011, 16:25 | |
|
Не по теме: lifestyle, и что, это работает и с дисковыми файлами? А если нет чтения/записи, например, интенсивные вычисления?
0
|
|
|
2 / 2 / 1
Регистрация: 24.03.2010
Сообщений: 121
|
|||||||
| 14.10.2011, 18:53 [ТС] | |||||||
|
Переправил на CTablicaDlg *pDlg = (CTablicaDlg *)Param, но скомпилилась только после написания слова "public" перед самой функцией в классе (хотя она и так была public, странно). Теперь при выполнении FillGrid() вылезает debug assertion failed. Упрощенный код этой функции (с пометкой места ошибки) ниже:
Еще один момент. FillGrid() вызывается не 1 раз, т.е. 9000 проходов делаются не сразу. Получается, что каждый раз при обращении к FillGrid() будет создаваться новый поток.
0
|
|||||||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
|
| 14.10.2011, 19:04 | |
|
назовите мне разницу между слипом и таймаутом (не на уровне академической науки, а на уровне прикладника)задача одна и та же отобрать у процесса время
слип это не типа цикл задержка на скоко-то секунд слип он и есть слип(уснуть) а не задержка (делай)
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|||||||
| 14.10.2011, 19:23 | |||||||
|
Простенький пример реализации...
а таймаут ,в случае с ком портом расмотренный выше пример, на протяжении которого поток пытается считать данные и если таймаут исчерпан чтение заканчивается и продолжается дальше т.е. ReadFile возвращает управление потоку даже если ничего не было прочитано с порта по истечении таймаута...
1
|
|||||||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
||
| 14.10.2011, 19:38 | ||
|
а не понятно о чем речь! навскидку обратными функциями (цал бэк) могут быть только статические или глобальные функции оно и понятно объектов может быть до проха а а функция должна быть в памяти одна (иначе куда системе передавать управление) посему статическая функция не имеет доступа к элементам класса х=0 к какому х мы обращаемся нужно писать так this->x=0 обрашение к переменной х текущего элемента извините если объяснил сумбурно
0
|
||
| 14.10.2011, 19:38 | |
|
Помогаю со студенческими работами здесь
20
Принудительный выход из цикла foreach Принудительный выход из программы Принудительный выход из метода Принудительный выход из прерывания на СИ Принудительный выход из программы не работает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|