![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
такой вопрос
есть форма где объявлены разные переменные, а также объявлен 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;и спокойно обращаюсь и из потока и из формы |