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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2014, 01:05   #1
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию Обращение к переменной через поток.

Собственно весь вопрос в название.... Можно ли через поток обратиться к переменной типа Boolean через поток? К компоненту например я обращаюсь так
Код:
form1.memo1.lines.add('');
А к переменной не знаю как подойти.
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 26.10.2014, 01:23   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,894
По умолчанию

Цитата:
Сообщение от Fahman Посмотреть сообщение
Собственно весь вопрос в название.... Можно ли через поток обратиться к переменной типа Boolean через поток? К компоненту например я обращаюсь так
Код:
form1.memo1.lines.add('');
А к переменной не знаю как подойти.
А к переменной точно так же. Указывая имя её "хозяина". "Хозяином" переменной в Дельфи является либо класс (в т.ч. класс потока), либо модуль (unit).
northener вне форума Ответить с цитированием
Старый 26.10.2014, 01:26   #3
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Описывать переменную нужно для потока и синхронизировать. Позже, не сегодня, пример скину, пока не могу, удалил ide, качаю новую...
kta87 вне форума Ответить с цитированием
Старый 26.10.2014, 01:46   #4
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

Как вариант объяви переменную как часть класса потока и присваивай ей значение при создании потока
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru
grominfo вне форума Ответить с цитированием
Старый 26.10.2014, 09:49   #5
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,834
По умолчанию

Можно еще прочитать в справке Delphi про ключевое слово threadvar.
В разработке: воспроизводственный контур ИТ
Vapaamies на форуме Ответить с цитированием
Старый 26.10.2014, 12:04   #6
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

С созданием потока проблем нет и подключил все норм, объясню всю суть...
На форме Spagecontrol стоит и в нем 3 вкладки на событие
Код:
procedure TForm1.sPageControl1Change(Sender: TObject);
У меня запускается 1 поток который выглядит так

Код:
procedure potok1.Execute;
begin
if Form1.sPageControl1.ActivePageIndex=0 then
 if Form1.ct=False then
 begin
     Form1.navi.navigate('первый сайт');
     Form1.ct:=True;
 end;
  if Form1.sPageControl1.ActivePageIndex=1 then
 if Form1.pt=False then
 begin
     Form1.WebBrowser1.navigate('второй сайт');
     Form1.pt:=True;
 end;
  if Form1.sPageControl1.ActivePageIndex=2 then
 if Form1.ec=False then
 begin
     Form1.WebBrowser2.navigate(третий сайт);
     Form1.ec:=True;
 end;
end;
На форме есть 3 переменной
Код:
ct
pt
ec
Тип у них 1 Boolean
Зачем они?
На каждой из вкладок стоит по браузеру и на форм крейт поставил так
Код:
ct:=False;
pt2:=False;
ec2:=false;
при открытии формы браузеры пусты? пусты и переменные равны false и на потоке проверяет если Form1.sPageControl1.ActivePageIndex =0 то грузим страницу и переменная ровняется тру все чтоб потом когда я перелистывал странички у меня по 100500 раз не грузилась страница в браузер, достаточно одной загрузки данные динамические и обновляются на страничке аяксом...
P.S.
Просто когда браузер грузит страницу и я например хочу свернуть форму она у меня подвисает вот я и создал для загрузки отдельный поток
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 26.10.2014, 13:07   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Так же как и с компонентами, можно обращаться к переменным, но только помни: Обратится к переменной в один и тот же момент времени может только 1 поток, иначе словишь Access Violition.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 26.10.2014, 14:04   #8
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
Так же как и с компонентами, можно обращаться к переменным, но только помни: Обратится к переменной в один и тот же момент времени может только 1 поток, иначе словишь Access Violition.
Ну у меня 1 поток обращается только к трем переменным, и почему выходит ошибка? или я не так обращаюсь?
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 26.10.2014, 14:11   #9
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

Как объявлены переменные? Объявите их в секции public формы и обращайтесь к ним через form


public
FC:boolean;

..............

Form1.FC:=true
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru
grominfo вне форума Ответить с цитированием
Старый 26.10.2014, 17:12   #10
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от grominfo Посмотреть сообщение
Как объявлены переменные? Объявите их в секции public формы и обращайтесь к ним через form


public
FC:boolean;

..............

Form1.FC:=true
Помогло, а не подскажете почему вылетает ошибка при повторном запуске потока? точнее как я понял мне надо проверить если поток запущен то перезапустить его ото выдает ошибку вот вызов потока только и задал приоритет
Код:
procedure TForm1.sPageControl1Change(Sender: TObject);
begin

  potok1.Create(false);
  potok1.Priority:=tpNormal;


end;
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к переменной Hello-World Qt и кроссплатформенное программирование С/С++ 1 22.12.2012 21:31
Ошибка при обращение к переменной COM объекта koljsch C++ Builder 9 18.09.2012 02:02
Занесение содержимого строковой переменной в поток DannerDOS Общие вопросы Delphi 5 06.05.2010 13:28
Обращение к переменной через другую переменную tae1980 Microsoft Office Excel 2 22.03.2010 00:52
вывод переменной в поток на Си pysik Помощь студентам 2 17.08.2009 16:17