Форум — Ответы     (  К темам )
 ?  Romul: Помогите пожалуйста с потоками !!! (24-04-2003 20:01:11)
Unit 1
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
T1 *Thread1 = new T1(false);
T2 *Thread2 = new T2(false);
}
Unit 2
extern T2 *Thread2;
__fastcall T1::T1(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall T1::Execute()
{
Thread2->WaitFor();
}
Unit 3 без изменений.
Все что я изменил.Unit1.h,Unit2.h,Unit3.h не изменены.
Unit1 форма, Unit 2 и 3 стандартные потоки.
Выдается следующая ошибка. Что еще изменить ?
[Linker Error] Unresolved external '_Thread2' referenced from C:\BUILDER\PROJECTS\UNIT2.OB
 Георгий (24-04-2003 22:22:59)
у тебя действительно не обьявлен нигде обьект thread2 — вот редактор связей и не может установить связь.
если пишешь extern — то это ты говоришь, что этот обьект находится где-то в другом месте и компилятор не ругается, а редактору связей уже нужен адрес (хотя не совсем адрес но суть таже) этого обьекта, а его нэту!
 romul (26-04-2003 00:52:05)
Можно узнать как это исправить (пожалуйста,поконкретнее )
Разве Thread2 не задается
T2 *Thread2 = new T2(false);
Класс T2 описан нормально
 Георгий (27-04-2003 21:27:22)
если в Unit2 написано:
extern T2 *Thread2;
то это указание, что где — то в пределах этого проекта есть глобальная переменная Thread2 типа T2* (указатель на T2)
а она у тебя нигде не обьявлена:
"Разве Thread2 не задается
T2 *Thread2 = new T2(false);" — это обьявление ЛОКАЛЬНОЙ (или стековой) переменной

можно (и даже нужно) сделать так:
Unit 1
<----изменено---->T2* Thread2;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
T1 *Thread1 = new T1(false);
<----изменено---->Thread2 = new T2(false);
}
Unit 2
extern T2 *Thread2;
__fastcall T1::T1(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall T1::Execute()
{
Thread2->WaitFor();
}
Unit 3 без изменений.

нет ни какой принципиальной разницы, где обьявлена глобальная переменная, но обычно её обьявляют там же, где и пишут код её описывающий — у тебя это unit3