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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2008, 13:05   #31
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ох и демагогия!...
Непонимаю хода мыслей спорящих - на мой взгляд лучшее решение предбявил B_N
Он верно сказал что мона сделать одну главную форму,а остальные будут создаваться когда пользователь захочет открыть еще один файл, причем насчет потоков это тоже светлая мыслю, хоть и не обязательная.
интересует, в первую очереь, корректность моего решения.
Sergey2 вне форума Ответить с цитированием
Старый 28.01.2008, 14:17   #32
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Исходя из топика решение может и корректно но абсолютно неэффективно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.01.2008, 16:08   #33
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
интересует, в первую очереь, корректность моего решения.
А что Вы понимаете под "корректностью" решения? Вам же три страницы подряд пишут что оно некорректно и объясняют, почему.
По пунтктам:
1.
Код:
with TForm2.Create(Application) do
Вы вызываете конструктор, а дальнейшая судьба переменной, которую он создает, Вас не волнует. Я уже не говорю о том, что это даже отлаживать будет сплошное мученье, понять к какой форме относится какая строка будет очень непросто. Да и где гарантия, что с таким походом Вы просто не будете терять память.
2. С чего Вы взяли, что спецификатор private отвечает за "дублирование" членов класса? Попробуйте, перенесите объявление str в паблик, ради интереса.
3.
Код:
    try
      Label1.Caption:=Edit1.Text;
      Show;
    except
      Free;
    end;
Что означает сия конструкция? Что такого драматичного в коде
Код:
      Label1.Caption:=Edit1.Text;
      Show;
что Вы взяли его в SEH? И почему Вы думаете, что до try дело вообще дойдет, если Вы пишете, что все действия над данными Вы производите при создании формы?
Цитата:
....у него в frmFunc.onCreate происходит запуск всего чего надо и дальше все само работает.
Как из представленного можно оценить "корректность"?
4. Как Вы собираетесь разделять время между вашими обработчиками? Какой смысл делать много форм, если фактически они будут вынуждены ждать друг друга? Или Вы расчитываете вызывать Application.ProcessMessages в обработчике таймера? Ничего не получится, WM_TIMER само надо извлекать из очереди. Вы расчитываете файберы вместо потоков организовать? Чем тогда плохи потоки? Вы Планируете делать какую-то особенную диспетчеризацию? Зачем так усложнять?
B_N вне форума Ответить с цитированием
Старый 28.01.2008, 23:48   #34
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
А что Вы понимаете под "корректностью" решения? Вам же три страницы подряд пишут что оно некорректно и объясняют, почему.
По пунтктам:
1.
Код:
with TForm2.Create(Application) do
Вы вызываете конструктор, а дальнейшая судьба переменной, которую он создает, Вас не волнует.
Именно так.
Цитата:
Я уже не говорю о том, что это даже отлаживать будет сплошное мученье, понять к какой форме относится какая строка будет очень непросто.
Да ни надо ничего отлаживать. Уже все отлажено и работает. Но в одном экземпляре. В крайнем случаи можно сделать Form2 главной, пускат ьее в одном экземпляре и отлаживать.
Цитата:
Да и где гарантия, что с таким походом Вы просто не будете терять память.
Вот про это я и спрашивал. Так вот вопрос, будули я терять память или она будет освобождаться при закрытии окна?
Цитата:
2. С чего Вы взяли, что спецификатор private отвечает за "дублирование" членов класса? Попробуйте, перенесите объявление str в паблик, ради интереса.
Ну про дублирования я ничего такого не говорил.
Цитата:
3.
Код:
    try
      Label1.Caption:=Edit1.Text;
      Show;
    except
      Free;
    end;
Что означает сия конструкция? Что такого драматичного в коде
Код:
      Label1.Caption:=Edit1.Text;
      Show;
что Вы взяли его в SEH?
Ну мало ли там памяти нехватит или еще что за фигня произойдет при создании...
Цитата:
И почему Вы думаете, что до try дело вообще дойдет, если Вы пишете, что все действия над данными Вы производите при создании формы?
Я же проект целиком кинул. Он работает, т.е. до try дело доходит. А почему не должно дойти?
Цитата:
Как из представленного можно оценить "корректность"?
А в чем проблемма то? Некоректно это когда производиться попытка изменять код счетчика цикла или когда объект создаеться, но не уничтожается. Все это работает и ерроров не выкидывает, но некоректно.
Цитата:
4. Как Вы собираетесь разделять время между вашими обработчиками? Какой смысл делать много форм, если фактически они будут вынуждены ждать друг друга? Или Вы расчитываете вызывать Application.ProcessMessages в обработчике таймера? Ничего не получится, WM_TIMER само надо извлекать из очереди. Вы расчитываете файберы вместо потоков организовать? Чем тогда плохи потоки? Вы Планируете делать какую-то особенную диспетчеризацию? Зачем так усложнять?
1. ВСЕ РАБОТАЕТ. Ненадо разделять время между обработчиками, нинадо никаких процессмесаджей, нинадо никаких таймеров из очереди извлекать. НИЧЕГО НЕ НАДО.
2. Продолжение ответа на первый вопрос. Потоки тем и "плохи", что под них код надо модернизировать, а в данном случае нет.
Sergey2 вне форума Ответить с цитированием
Старый 29.01.2008, 08:45   #35
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Да ни надо ничего отлаживать.
Это я попробую оставить без комментариев. Вы уж извините, но тот, кто так считает - персонаж анекдотов.

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Вот про это я и спрашивал. Так вот вопрос, будули я терять память или она будет освобождаться при закрытии окна?
А Вы что же, полагаете, что при закрытии окна Windows автоматически вызывается деструктор VCL? Вы не пробовали метод FreeInstance переопределить, и посмотреть, попадет ли туда выполнение хоть раз? Или Вы не занимаетесь такой ерундой, как отладка?

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Ну про дублирования я ничего такого не говорил.
А вот это кто писал?
Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Если переменную объявить как не в привайте, то изменение значения переменной в одной форме вызывает изменение значений во всех формах. А если объявить в привайте, то каждое значение индивидуально.
Далее, Вы пишете:
Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Ну мало ли там памяти нехватит или еще что за фигня произойдет при создании...
Я же проект целиком кинул. Он работает, т.е. до try дело доходит. А почему не должно дойти?
Позвольте, а что создает вот этот участок программы????
Код:
      Label1.Caption:=Edit1.Text;
      Show;
Попробуйте в Вашем обработчике TForm2.FormCreate (видимо там Вы ожидаете проблем?) написать вот так:
Код:
procedure TForm2.FormCreate(Sender: TObject);
begin
  str:=TimeToStr(Now)+' - ';
  RaiseException(0,0,0,0);
end;
И посмотрите, доберетесь ли до try.
Читал я то, что Вы называете "проектом". Судя по счетчику, я последний, кто пытается ответить на Ваш же вопрос:
Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Чего еще нехватает?
-------
Цитата:
Сообщение от Sergey2 Посмотреть сообщение
А в чем проблемма то? Некоректно это когда производиться попытка изменять код счетчика цикла или когда объект создаеться, но не уничтожается.
Вы полагаете, что этим исчерпываются возможные проблемы при разработке? Или полагаете, что если проект скомпилировался, то этого достаточно?

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
1. ВСЕ РАБОТАЕТ. Ненадо разделять время между обработчиками, нинадо никаких процессмесаджей, нинадо никаких таймеров из очереди извлекать. НИЧЕГО НЕ НАДО.
У вас "работает" "сложение" двух строк, которое занимает от силы полсотни тактов. Давайте посмотрим на Вашу вводную:

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Жмешь в ее окне кнопку и она определенный файл обрабатывает и быковки выводит десять раз в секунду в Memo. Ручейком. Это есть. Надо следующее:
Программа-оболочка, в которой выбираешь файл, жмешь "обработать" и появляется окно вышеописанной программы в которой в Memo льются буковки. Потом из программы-оболочки выбираешь другой файл, жмешь "обработать" и появляется еще одно окно в котором бегут буковки второго файла по мемо.
и сэмулируем Вашу "обработку" из того расчета, что файл будет обрабатываться, скажем, минуту:
Код:
procedure TForm2.Timer1Timer(Sender: TObject);
var StartTime : dword;
begin
    StartTime := GetTickCount();
    repeat until GetTickCount() > StartTime + 60000;

    Caption:=str+TimeToStr(Now);
end;
Запустили? Ну и попробуйте теперь нажать кнопку.

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
2. Продолжение ответа на первый вопрос. Потоки тем и "плохи", что под них код надо модернизировать, а в данном случае нет.
Вы извините, но огранизовать и запустить поток - это максимум десяток строчек. Если Вы не знаете, как это делается, это еще не значит, что это так сложно.

Одним словом, если Вы спрашивали советов в своем первом посте, то советов Вам тут надавали с три короба, а уж будете ли Вы к ним прислушиваться - дело хозяйское.

Последний раз редактировалось B_N; 29.01.2008 в 08:50.
B_N вне форума Ответить с цитированием
Старый 29.01.2008, 09:02   #36
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кстати, насчет потоков, автор тут лениться маненько. так вот: есть компоненты которые сами организовывают поток и им управляют, достаточно кинуть такой компонент на форму и прописать ему обработчик, и ничего более не нужно мутить сложного, ибо он сам все организует не только правильно, но и надежно - И далеко не надо за ними хотить они есть в бесплатном JEDI. Так что если нет желания самому организовывать потоки, предоставь это мастерам из Борланд - честь им и хвала!.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поверх окон Лубышев Помощь студентам 1 29.01.2008 13:43
Координаты окон Лубышев Общие вопросы Delphi 6 22.01.2008 19:40
Размножение червя ZYRGiX Безопасность, Шифрование 6 07.09.2007 19:39
Пристыковка Окон OrdJONY Общие вопросы Delphi 15 19.04.2007 12:47