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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2018, 11:28   #1
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию Главный цикл

Возможно, этот вопрос уже был, не исключено даже, что от меня, но склероз, и Гуголь не в помощь
Крутится бесконечный цикл, из него по клику мыши извлекаются значения и что-то с ними делаем. Так вроде в Дельфи главного цикла и нету, по крайней мере в *.pas ? Как бы его организовать, и желательно - без потоков ? Таймер - не совсем клево, мин. интервал 1мс - многовато. В OnActivate c применением ApplicationMessage ?
Что делать, и в перезрелые годы чайникизм не исключен

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

Цитата:
Сообщение от digitalis Посмотреть сообщение
Так вроде в Дельфи главного цикла и нету
Как это нету? А как же оно тогда сообщения обрабатывает?
Смотрите внимательнее в dpr.

...но вряд ли он вам нужен.

Отдельный поток удобнее и логичнее всего, но наверно можно и просто цикл где угодно в UI потоке и чтобы не висел UI вызывать Application.ProcessMessages.
Но скорее всего лучше просто таймер, зачем зря грузить процессор? Что вы такое странное делаете?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.09.2018, 12:04   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Не буду говорить, а то станете смеяться Моделирую реализацию "игральной кости" на микроконтроллере, чтобы убедиться, что интервал апериодичности достаточно хорош.
Потоками заниматься уже не буду, бо "старую собаку не научишь новым фокусам " ©
Сейчас генерирую непрерывный поток ПСЧ таймером 1мс, а выборку делаю другим со случайно изменяемым интервалом. Но модель получается не совсем корректной, т.к. таймеры не совсем независимы. Впрочем, для такой смешной задачи этого м.быть и хватит.
И все-таки мучает вопрос: куда впиндюрить код что-то вроде
N := (N+137) and 65535 - и без потоков,
чтоб он крутился "вечно", но к нему был доступ из обработчика? Или it is impossible ?
A .dpr - так вот он весь:
Код:
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Он как президент - распределил обязанности - и работайте, а мелочами заниматься вроде отдельных переменных - не его это царское дело, да?

Последний раз редактировалось digitalis; 20.09.2018 в 12:17.
digitalis вне форума Ответить с цитированием
Старый 20.09.2018, 13:25   #4
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

сделай цикл
Код:
while (условие) do
а вместо условия пиши 0<1
и будет он тебе вечно крутиться
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 20.09.2018, 13:28   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Писать то можно и просто True вместо условия. Без пауз такой цикл процессор полностью загрузит. И в потоке или таймере

Цитата:
Так вроде в Дельфи главного цикла и нету
Код:
Application.Run;
в Forms
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.09.2018 в 13:46.
Аватар вне форума Ответить с цитированием
Старый 20.09.2018, 15:47   #6
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Кладёте на форму компонент ApplicationEvents, в обработчики OnIdle пишете тело вашего цикла и в конце done:=False; тогда код будет вызваться в цикле после всех сообщений.

Для примера периодический опрос ком-мыши.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    Memo1: TMemo;
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f:file of byte;
  a:array [0..4] of byte;
  i:byte=0;
  LB,MB,RB:boolen;
  DX,DY:shortint;
implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
  var Done: Boolean);
var b:byte;
begin
Read(f,b);
a[i]:=b;
memo1.Text:=memo1.Text+inttostr(b)+' ';
inc(i)
if (i=1)and b=32  then
 begin
 MB:=true;
 i:=0;
 end;
if i=3 then
 begin

 i:=0;
 end;
Done:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,b:byte;
begin
assignfile(f,'COM2');
reset(f);
b:=$b;
write(f,b);
for i:=1 to 30 do
read(f,b);
end;

end.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 20.09.2018, 16:00   #7
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 979
По умолчанию

какая странная постановка вопроса... чем тебе random не понравился? в нём и интервал значений разный есть.
Хорошо допустим тебе надо видуализацию стандартной кости (что бы теоретически пользователь мог иметь возможность остановить на нужном значении). тогда проще всего джеди компонент использовать. JvDice. там свойство инетрвал смены числа и интервал задержки и прочее.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 20.09.2018, 18:31   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Блин, так и ждал - когда же обсуждение "как сделать?" свихнется на "а на хрена тебе оно сдалось? ". Ждать пришлось недолго. В "кубике" не будет ни джеди (чо такое -хз , не дай бог ночью приснится), ни JvDice, ни рандом, ни даже компа вообще! Будет коробочка с 1 кнопочкой и 14 светодиодами, управляется весь этот зоопарк МК-шкой с 1кб программной флеши и 128 байт (не МБ!) ОЗУ. Так что ООП, классы, полиморфизьм и стандартные либы, понурившись, идут мимо. Тестируется алгоритм, а не будущая прога для ПК.
Pavia, thanks, но я ничего не понял, код должен начинать работу сразу после Activate и заканчиваться при закрытии формы, не реагируя ни на какие другие события, но позволяя считывать из себя текущее значение переменной.
Код:
 Done:=false;
А кто же "взведет курок"
Код:
 Done:=true;
?
ApplicationEvents1Idle - почитаю, что это за зверь, если найду.
Аватар кажется, мы пошли по второму кругу. Ясно, что Application.Run запускает то, что прописано в .pas. Но там прописаны только обработчики событий. Так что "мега-оператор" Application.Run выполняет функцию вахтера: сиди молча и жди, произойдет событие - обработчик его выполнит - и опять "сижу, куру" . А если не "сиди и жди", а в фоновом режиме, к примеру, "вяжи внучке носочки" - как это объяснить этому Application.Run, в какие файлы расписать? Какой метод компонента Forms ?
В общем, я так понял - миссия невыполнима. Или нужно делать шаманские телодвижения, на пару порядков сложнее Рунге-Кутта или Фурье. Можем закрывать. Мне проще спаять дивайсик и проверить на железе живьем.
Спасибо за обсуждение.
PS если кто скажет, что такой примитив можно сделать вообще без МК, соглашусь немедленно и даже дюжину схем нарисую. но мы же не в radiokot.ru

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

Цитата:
Сообщение от digitalis Посмотреть сообщение
не будет ни джеди (чо такое -хз , не дай бог ночью приснится)
Название популярной большой библиотеки компонентов для Дельфи.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.09.2018, 19:13   #10
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Не, в микроконтроллер либы ни из Дельфи, ни из Питона или ЛИСП не лезут.
digitalis вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не определяется главный класс PastoriXx Общие вопросы по Java, Java SE, Kotlin 3 21.04.2011 18:46
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34