![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Подтвердите свой е-майл
Регистрация: 05.04.2010
Сообщений: 76
|
![]()
Привет Всем! Подскажите пожалуйста как определить глобальную переменную с типом потока? Два модуля связаны м/у собой.
Сам поток: unit Unit2; interface uses Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF}; type Thread = class(TThread) protected procedure Execute; override; end; implementation uses Unit1; procedure Thread.Execute; begin NameThreadForDebugging('Thread'); end; end. Главная форма unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; private { Private declarations } public { Public declarations } end; var Form1: TForm1; Potok:Thread;<--вот эта переменная не определяется. implementation uses Unit2; {$R *.dfm} end. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Ничего, что в Unit1 ты используешь Thread до подключения Unit2?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#3 |
Подтвердите свой е-майл
Регистрация: 05.04.2010
Сообщений: 76
|
![]()
Дело в том что когда я эту переменную объявляю в процедуре то все работает.
Я использую Delphi 2010 Главная форма unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; var Potok:Thread;<- если сюда ставишь то сразу подчёркивает красной линией.(И программа уже не компилица указывает что на этой строчке ошибка). implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Potok:Thread;<- а тут норм объяв-ся и поток норм. запускается. begin Potok := Thread.Create(true); Potok.Priority := tpLowest; Potok.FreeOnTerminate := true; Potok.Start; end; end. Сам поток: unit Unit2; interface uses Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF}; type Thread = class(TThread) protected procedure Execute; override; end; implementation uses Unit1; procedure Thread.Execute; begin NameThreadForDebugging('Thread'); end; end. Последний раз редактировалось AndreyK; 01.04.2011 в 17:39. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
> объявляю в процедуре то все работает
процедура тут не при чём. Прочитайте ещё раз внимательно, что вам написали выше. Пока не будет подключен uses Unit2; компилятор понятия не имеет, что где-то там у вас объявлен тип с загадочным именем Thread.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#5 |
Подтвердите свой е-майл
Регистрация: 05.04.2010
Сообщений: 76
|
![]()
Главная форма
... implementation uses Unit2;<- он подключен. {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Potok:Thread;<- а тут норм объяв-ся и поток норм. запускается. begin Potok := Thread.Create(true); Potok.Priority := tpLowest; Potok.FreeOnTerminate := true; Potok.Start; end; end. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
> он подключен
для вас слова до и после имеют смысл? а для компилятора имеют.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#7 |
Подтвердите свой е-майл
Регистрация: 05.04.2010
Сообщений: 76
|
![]()
Все! Спасибо огромное)) veniside и GunSmoker.
Сделал так. Главная форма ... implementation uses Unit2; var Potok:Thread; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Potok := Thread.Create(true); Potok.Priority := tpLowest; Potok.FreeOnTerminate := true; Potok.Start; end; end. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
Наконец-то )
Кстати, после вызова Potok.Start; смысл в глобальной переменной var Potok:Thread; стремится к нулю, т.к. поток в лобой неизвестный момент времени может освободиться (у нас ведь FreeOnTerminate := true; ), и обращение к Potok в лучшем случае вызовет AV.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с глобальной переменной | HollyPaladin | Общие вопросы C/C++ | 4 | 08.10.2010 12:06 |
Использование глобальной переменной в потоке | Шульц | Общие вопросы Delphi | 12 | 18.03.2010 20:00 |
Многопоточность с глобальной переменной | Шульц | Общие вопросы Delphi | 1 | 30.01.2010 18:19 |
Объявление глобальной переменной | Grom48 | Общие вопросы Delphi | 3 | 19.12.2009 22:16 |
Проблема глобальной переменной | Хохматый | Microsoft Office Access | 1 | 18.06.2009 13:04 |