Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 18

Где располагать долго выполняемые функции?

26.11.2014, 16:40. Показов 2124. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В моей программе после выбора файла требуется выполнять очень долгие действия с ним.
При этом не работает отображение формы.
Я свой длинный код поместил в функцию
C++
1
2
3
4
5
6
void __fastcall TForm1::Button1Click(TObject *Sender){
 
OpenDialog1->Execute();        
//очень большой код с выбранным файлом
 
}
Полагаю это не правильно. Здесь нужно только сохранить путь к выбраному файлу.
А где в билдере следует помещать основной код.
Что является аналогом main()?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2014, 16:40
Ответы с готовыми решениями:

Enum или enum class и где его располагать
Для удобства хочу сделать перечисление уровней через enum. Но запутался, как правильно. Просьба подсказать простым языком. 1. В чём...

Где располагать скрипт
Господа, а есть разница, где располагать теги <script></script> - в <head> или <body>? И есть ли разница в работе скриптов: -...

Где в страницах, использующих MasterPage, можно располагать keywords
У меня несколько сотен страниц в сайте. И с целью унификации оформления и меню я использовал MasterPage. Для того, чтобы поисковики...

22
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.11.2014, 11:18
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Evg Посмотреть сообщение
Если ты имеешь в виду, что имеется общедоступный ресурс (где хранится информация о процентах), то по науке он нужен. А в реальности особого смысла не имеет, т.к. здесь не требуется на экране достоверно точного отображения.
Достоверное как раз требуется, а то вторичный поток начнёт менять эту запись, запишет ноль в младшую часть, потом полезет увеличивать до единицы старшую и в этот момент первичный прочитает ноль в младшей части и ещё не переписанный на единицу ноль в старшей и получится 0 вместо 256 из 257. Но практически процентов всего 100, а число от 0 до 100 отлично укладывается в один байт, гарантированно записываемый за одну операцию и также гарантированно за одну операцию читаемый и секция не нужна.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.11.2014, 12:25
Цитата Сообщение от gumi250 Посмотреть сообщение
Если хранить % в общей float переменной, то может произойти так, что основной поток считает эту переменную в момент ее записи дочерним потоком
В любой "нормальной" машине операция записи в память является атомарной в объёме своей разрядности. Т.е. 64-разрядная машина гарантирует, что запись выровненных 8 байт произойдёт одномоментно, а если кто-то в это время читал оттуда данные, то гарантированно прочтёт либо полностью старое значение, либо полностью новое. Если бы в машинах такое свойство не поддерживалось, то по нормальному не возможно было бы реализовать всякие мьютексы и прочие конструкции, атомарное изменение которых происходит без обращения к операционной системе. Вернее, поддержать было бы можно, но только через обращение к операционной системе (т.е. с большими затратами на синхронизацию)

В любом случае твоя мысль понятна. И в этом случае для душевного спокойствия действительно лучше использовать какое-нибудь честное средство синхронизации: критическую секцию, мьютекс, примитив со смыслом "атомарное изменение значения"
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.11.2014, 13:23
Цитата Сообщение от Evg Посмотреть сообщение
В любой "нормальной" машине операция записи в память является атомарной в объёме своей разрядности.
А вот не факт. Во-первых шина может быть короче регистра, а во-вторых большое данное может быть программно реализовано как составное. Даже short int может быть объявлено как
C++
1
2
3
4
5
union
{
 short int value;
 struct {low, hi} parts;
}
и писаться побайтно, а читаться целиком, или наоборот. Или даже вообще вместо одного short int можно объявить два байта и работать с каждым отдельно. А байт - это уже отдельная цифра, он хоть и может быть поделён битовыми масками на поля ещё меньшей ичности, но только специально и когда у него смысл единого числа, то так не делают.
Цитата Сообщение от Evg Посмотреть сообщение
что запись выровненных 8 байт произойдёт одномоментно,
Я элементарно размещу слово на нечётном адресе.

Добавлено через 9 минут
Цитата Сообщение от Evg Посмотреть сообщение
В любом случае твоя мысль понятна. И в этом случае для душевного спокойствия действительно лучше использовать какое-нибудь честное средство синхронизации: критическую секцию, мьютекс, примитив со смыслом "атомарное изменение значения"
Нет, не понятна. Попробую ещё раз. В общем случае не известно, где и по какому недомыслию вдруг окажется длинная арифметика даже на машине, способной реализовать ту же разрядность аппаратно. В том числе из-за нарушения выравнивания. Кто запретит сделать большой массив/struct и указатель внутрь его?
C++
1
2
char s[1000];
short int *i=(sort int*)(s+23); // Указатель на не выровненное короткое целое, все нормальные машины не способны выполнять атомарные операции записи в слова, чей адрес не кратен их же разрядности
,
C++
1
2
3
4
5
6
7
8
9
10
11
struct A
{
 char a;
 char b;
 char c;
 char d;
 char e;
 short f;
};
A a;
short int *p=(short int*)((char*)a); // Ещё один не выровненный указатель на короткое целое.
.

Добавлено через 2 минуты
Но именно байт от подобного застрахован, его можно поделить только специально.

Добавлено через 9 минут
А в остальных случаях прежде чем обходиться без синхронизации надо сначала убедиться, на процессоре какой разрядности программа будет выполняться (ага, вспомнить, что пишем не для контроллера), не применены ли всякие безобразия для отмены выравнивания, какая на целевой машине разрядность шины данных и какой тип имеет сама переменная и как в нём реализована запись значения в оперативу. Для всех стандартных типов на x64 и для типов до long включительно на win32 достаточно, что данное выровнено. Для не стандартных лезьте в реализацию арифметики.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2014, 13:23

Где располагать логику приложения, когда используем паттерн mvvm?
Изучаю wpf и паттерн mvvm. Никогда не задумывался, где что располагать, я считал (считаю пока), что представление - это пользовательский...

Долго прогружается, там где бегунок тусклый экран долго, а потом загрузка
JcXM1tJV3c8

Где лучше разместить долго выполняющийся код из Form_Load?
Вообщем в Form_Load у меня стоят много запросов на сайт, пока эти запросы не пройдут все форма не откроется, куда поставить эти запросы...

Операторы выполняемые над деревом
Не могу разобраться с задачкой. Может кто нибудь поможет? Напишите программу, которая представляет операторы, выполняемые над деревом...

Не отображает выполняемые задания в панели
В панели задач не отображаются выполняемые задания, можно, конечно, переключаться через Alt+Tab, но это неудобно.Подскажите пожалуйста,...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru