Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2018, 12:38   #1
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию Main в Delphi ?

Странный вопрос возник вдруг.
Есть некая прога, которая непрерывно генерирует число по какому - то закону (не принципиально). По нажатию кнопки число заносится в массив, инкрементируется индекс. По достижению некоторого количества набранных значений перехожу к анализу массива.
В процедурно-ориентированном языке (Си, к примеру) непрерывную генерацию организовал бы в главной процедуре main, в которую периодически "нырял" бы за извлечением очередного значения. Но в Delphi главной процедуры как бы и нет, т.е. она есть - ожидание событий в бесконечном цикле - но в нее не попасть программно ?
Сейчас я генерирую число по таймеру. Но если, к примеру, кнопка будет нажиматься достаточно регулярно (внешним устройством), то 2 регулярных процесса создадут некую интерференцию, наложение, и полученная последовательность будет очень не случайной. Можно, конечно, интервалы таймера менять случайным образом, но это как-то "левой ногой", да и 1мс интервал может быть великоват.
Есть выход, которого я не вижу пока ?
PS попробовал закинуть генерацию в OnActivate, но когда начинает эту генерацию - ничего уже не слышит, как тетерев на току.
digitalis вне форума Ответить с цитированием
Старый 21.04.2018, 12:46   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Как это нет? А в .dpr что?

Но я не понял как вам Main поможет.

Можно поток создать (Thread).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.04.2018, 12:51   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Код:
begin
//код
end.
Никто не отменял.


А так же есть же структура юнита вот можете поместить свой код в initialization
Код:
unit Unit1;

interface

uses  { List of units goes here }

  { Interface section goes here }

implementation

uses  { List of units goes here }

  { Implementation section goes here }

initialization
  { Initialization section goes here }

finalization
  { Finalization section goes here }

end.
Так же можно поместить код в обработчик события OnCreate а для компонентов в метод AfterConstruction.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 21.04.2018, 12:56   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Спасибо, есть направление думать.
Насчет .dpr - это же файл проекта, там вообще кода нет?
С потоками дел пока не имел, буду пробовать.
digitalis вне форума Ответить с цитированием
Старый 21.04.2018, 13:13   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
то 2 регулярных процесса создадут некую интерференцию, наложение, и полученная последовательность будет очень не случайной.
Скорее напротив внесёт случайность. Но если хотите разные, то придётся разделить генераторы и массивы. Благо код Random состоит из пару строк кода.


Цитата:
Сообщение от digitalis Посмотреть сообщение
По нажатию кнопки число заносится в массив, инкрементируется индекс. По достижению некоторого количества набранных значений перехожу к анализу массива.
Зачем таймер если можно получить текущее время и от него сгенерировать случайное число. Функция randomize();
Правда от такого подхода смысла мало, если у вас внешнии устройства завязаны на времени. То получится что числа не случайны а зависят от времени. Зная алгоритм их достаточно хорошо можно предсказывать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 21.04.2018, 13:22   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Кстати, код метода Execute потока имеет доступ к глобальным переменным? Интуевина подсказывает, что да - иначе зачем он нужен?
digitalis вне форума Ответить с цитированием
Старый 21.04.2018, 13:34   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Насчет .dpr - это же файл проекта, там вообще кода нет?
Так откройте и посмотрите что там.
Может от версии Дельфи зависит как файл называется, но формы вообще-то не сами создаются.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.04.2018, 13:40   #8
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Насчет .dpr - это же файл проекта, там вообще кода нет?
Путаете *.dpr с *.dproj
Но begin end можно написать не только в dpr но в и в модуле.

Цитата:
Сообщение от digitalis Посмотреть сообщение
Кстати, код метода Execute потока имеет доступ к глобальным переменным? Интуевина подсказывает, что да - иначе зачем он нужен?
Доступ к глобальным переменным имеет. Только что-бы не было проблем общие переменные, а глобальные считай общие переменные подлежат защите. Перед доступом следует войти в критическую секцию кода и после доступа выйте из критической секции кода.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 21.04.2018 в 13:47.
Pavia вне форума Ответить с цитированием
Старый 22.04.2018, 11:04   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Путаете *.dpr с *.dproj
Ни в одной папке с моими проектами нет *.dproj . Возможно, это в новых Дельфях, а у меня старушка 7-я .
Цитата:
следует войти в критическую секцию кода и после доступа выйте из критической секции кода.
Это для меня китайская песня в переложении на древнезулусский. Я не знаю, какие у меня секции - критические или нет - но все они одинаковые, сгенерированные компилятором, в которые я только помещаю исполняемый код.
Думаю, не так все страшно в моем случае. Я не планирую банковские транзакции, чтобы бояться коллизий. Речь идет о простой программе моделирования электронного устройства, модель его перед сборкой решил обкатать на компе. Вот освою (надеюсь) потоки, в нем будет крутиться генератор чисел (запись), по кнопке будет забираться число (чтение), так что подраться вроде они не должны.
Вот закончаться субботники - прямо и начну.
Изображения
Тип файла: jpg prj.JPG (29.4 Кб, 76 просмотров)

Последний раз редактировалось digitalis; 22.04.2018 в 11:11.
digitalis вне форума Ответить с цитированием
Старый 22.04.2018, 11:13   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Это для меня китайская песня в переложении на древнезулусский.
Это ж основы работы с потоками.
Ни разу не слышали про mutex или lock или "критические секции" (TCriticalSection в Дельфи) и прочие способы синхронизации?оО

http://forum.vingrad.ru/forum/topic-60076.html
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
main Rick Sanchez Общие вопросы C/C++ 1 05.12.2017 14:12
С# Windows.Forms Программа содержит более одной указанной точки входа: "Program.Main()". Скомпилируйте с /main, чтобы указать тип Maray Windows Forms 6 06.04.2016 07:07
Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:9) elpilasgsm Помощь студентам 4 18.01.2011 08:23
массив delphi с элементами main menu и striggrid elucia Помощь студентам 0 10.05.2010 22:51
Функция main и main(void) Pord Помощь студентам 1 11.12.2008 15:57