|
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 19
|
|
Работа с потоком в C++Builder22.04.2015, 23:37. Показов 3663. Ответов 29
Метки нет (Все метки)
Разработал приложение, которое делает очень много вычислений, процесс отобразил с помощью ProgressBar. В ходе выполнения программа зависала(не отвечала), а через некоторое время выдавала сообщение, что расчеты завершены(заканчивала свою работу правильно). Нашел на форуме решение - проводить все вычисления в отдельном потоке. Так-как с потоками я не работал, я быстро отыскал как его создать и примитивные функции для работы с ним. Проблема в том, что когда я не использовал поток, программа считала быстрее. В чем проблема?
0
|
|
| 22.04.2015, 23:37 | |
|
Ответы с готовыми решениями:
29
При работе с файлами и потоком fstream builder не хочет компилировать код Работа с большим потоком бит Работа с ComboBox в С++ Builder 6 |
|
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
|
||
| 23.04.2015, 08:42 | ||
|
Не по теме: Очевидно же, что в фазе луны после солнечного затмения! Ведь большая медведица отклонилась от млечного пути на 4 дельты. Без Вашего кода, Вам тут врядли кто поможет, всех экстрасенсов забрали на реалити шоу =(
1
|
||
|
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 19
|
||||||
| 23.04.2015, 11:10 [ТС] | ||||||
|
Вод код который прописан в потоке:
0
|
||||||
|
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
|
||||||
| 23.04.2015, 11:25 | ||||||
|
Что за написание цикла???
![]() Где заполняется массив j[] , N[], что такое PassLen?
0
|
||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 23.04.2015, 11:32 | ||
|
Ваш поток, заместо того, чтобы самостоятельно обсчитать все, что можно и один раз выдать результат, то и дело лезет в основной (Form1 -> CheckBox1 -> Checked - к примеру). Тут поработал чуть-чуть, пошел в другое место послонялся. И сам короче не работает и другим не дает.
1
|
||
|
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 19
|
|
| 23.04.2015, 11:37 [ТС] | |
|
Что здесь такого страшного?
В цикле сравнивается переменная PassLen типа int c таким же интом, при истинном значении цикл записывает в файл символ из массива Alphabet[...][...] ( при истинности этого условия конечно: if (Form1 -> CheckBox1 -> Checked)). j[] обрабатывается в управляющей конструкции "for", N[] заполняется в другой форме, массив объявлен как глобальный. Добавлено через 2 минуты Как мне тогда быть? Подскажите.) Исключить все обращения в основной поток?)
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||||||
| 23.04.2015, 11:50 | |||||||
|
6Houk9, зацените вот эту штуку, которая пишется при создании нового потока:
Если в трех словах, то вам нужно код вашего потока разделить на две части: обсчет чего-либо и выдачу результата. В классе потока вы создаете две соответствующие функции. И тогда метод Execute вашего потока будет выглядеть примерно так:
0
|
|||||||
| 23.04.2015, 11:57 | |
|
Не по теме: Рано ТС потоки изучать, он сишные ф-ции юзает а вы ему VCL, потоки...
0
|
|
| 23.04.2015, 12:00 | |
|
Не по теме: Avazart, это как плавать учить, есть методология такая: с лодки бросают в воду и как хочешь. Никаких бассейнов.
0
|
|
| 23.04.2015, 12:04 | |
|
Не по теме: Это тогда когда еще тазик нужен и цемент? :D
0
|
|
| 23.04.2015, 12:11 | |
|
Не по теме: Avazart, уроки программирования с видом на Гудзонский залив. Х)
0
|
|
|
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 19
|
|
| 23.04.2015, 14:11 [ТС] | |
|
А как мне быть с ProgressBar -> Position ++? Это необходимо выполнять при каждом шаге каждого цикла.
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 23.04.2015, 14:30 | ||
|
У вас так индексы в циклах выверены, что инкрементируя позицию прогресса на каждой итерации, ровно в конце цикла он дойдет до ста процентов заполненности? В любом случае переделывайте логику потока полностью. Полностью. Не суйте костыли. Вынесите цикл в Execute, и каждые n итераций синхронизируйтесь с прогрессбаром.
0
|
||
|
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 19
|
||||||
| 23.04.2015, 23:56 [ТС] | ||||||
|
Да, так выверенно, что доходит до 100% в конце). Спасибо за помощь, уберу все обращения в основной поток, которые находятся в цикле.) А как синхронизировать с ProgressBar на каждом шаге?) Напишите код пожалуйста)
Добавлено через 9 часов 21 минуту Убрал все обращения к основному потоку из циклов, все равно ему что-то мешает работать быстрей.
0
|
||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||||||||||||||||
| 24.04.2015, 09:02 | |||||||||||||||||
|
Должно получиться что-то типа:
0
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 19
|
|
| 24.04.2015, 12:33 [ТС] | |
|
Убрал обращения к ProgressBar в цикле, все работает как надо!) Но как тогда отобразит прогресс, раз нельзя обратиться из цикла к основному потоку?
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 24.04.2015, 12:56 | |
|
6Houk9, заведите переменную, которую внутри цикла увеличивайте. И раз в несколько итераций синхронизируйте значение этой переменной с прогрессбаром на форме.
0
|
|
| 24.04.2015, 13:01 | |
|
Не по теме: Да, а еще есть IdNotify ....
0
|
|
| 24.04.2015, 13:01 | |
|
Помогаю со студенческими работами здесь
20
работа с файлами С++ Builder Работа с реестром в C++ Builder С++ Builder и работа с графикой
Работа с C++ Builder XE4 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Команды "Заполнить" и "Очистить" на форме документа
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. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|