|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
TThread, переменные из Form1 и быстродействие
такой вопрос
есть форма где объявлены разные переменные, а также объявлен Thread который описан выше Код:
Form1= class(TForm) ... public { Public declarations } c:array of integer; cn:array of double; p:array of integer; A:array of integer; Ost:array of integer; N:integer; Thread1:TMyThread; ... В методе Execute используются переменные из Form1 procedure TMyThread.Execute; var ... begin .... while (not Terminated) do begin ... for i := 0 to Form1.N-1 do S1[index].F:=S1[index].F+Form1.F[i,(Form1.t0+j)mod 365]*Form1.c[i];] ... и т.д Влияет ли это на эффективность работы Threadа? Последний раз редактировалось lmikle, 04.08.2011 в 19:01. |
#2
|
||||
|
||||
Да, повлияет.
Из потока нельзя напрямую обращаться с VCL компонентам. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
однако это же паблик переменные, а не свойства с методами сет и гет
есть еще какие мнения? |
#4
|
|||
|
|||
Надо работать с переменными формы через Synchronize.
А еще, если несколько потоков, то и в критическую секцию "завернуть". |
#5
|
|||
|
|||
о как
на самом деле уже был сделан рабочий процесс, и он нормально обращался к переменным в виде Form1.N без Synchronize. Но на сколько это было эффективно, я смогу узнать когда сделаю вариант с копией переменных, объявленных в классе потока, чтобы обращалось сразу к N. Хотел узнать если кто проводил такое сравнение. В общем начал копировать переменные в класс потока, как доделаю и проведу сравнение быстродействия обязательно отпишусь. |
#6
|
||||
|
||||
я при работе с потоками переменные кидаю сюды
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1: TForm1; и спокойно обращаюсь и из потока и из формы |
#7
|
||||
|
||||
да без разницы где объявить переменные. "на глаз" не заметите, имхо. вот только если сразу несколько потоков с ними работают, то необходима синхронизация, через критические секции, к примеру.
Пишу программы за еду. __________________ |
#8
|
|||
|
|||
мне кажется тоже что нет существенной разницы
с проверкой этого вышла накладка, потому что задача отличается по трудоемкости |