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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 16:09   #1
AndreyK
Подтвердите свой е-майл
 
Регистрация: 05.04.2010
Сообщений: 76
По умолчанию Определение глобальной переменной с типом Потококового объекта(Thread)

Привет Всем! Подскажите пожалуйста как определить глобальную переменную с типом потока? Два модуля связаны м/у собой.

Сам поток:

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.
AndreyK вне форума Ответить с цитированием
Старый 01.04.2011, 16:23   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ничего, что в Unit1 ты используешь Thread до подключения Unit2?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.04.2011, 16:59   #3
AndreyK
Подтвердите свой е-майл
 
Регистрация: 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.
AndreyK вне форума Ответить с цитированием
Старый 01.04.2011, 17:47   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> объявляю в процедуре то все работает

процедура тут не при чём. Прочитайте ещё раз внимательно, что вам написали выше.

Пока не будет подключен uses Unit2; компилятор понятия не имеет, что где-то там у вас объявлен тип с загадочным именем Thread.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 01.04.2011, 17:58   #5
AndreyK
Подтвердите свой е-майл
 
Регистрация: 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.
AndreyK вне форума Ответить с цитированием
Старый 01.04.2011, 18:03   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> он подключен

для вас слова до и после имеют смысл? а для компилятора имеют.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 01.04.2011, 18:05   #7
AndreyK
Подтвердите свой е-майл
 
Регистрация: 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.
AndreyK вне форума Ответить с цитированием
Старый 01.04.2011, 18:17   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Наконец-то )

Кстати, после вызова Potok.Start; смысл в глобальной переменной var Potok:Thread; стремится к нулю, т.к. поток в лобой неизвестный момент времени может освободиться (у нас ведь FreeOnTerminate := true; ), и обращение к Potok в лучшем случае вызовет AV.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с глобальной переменной 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