Форум — Ответы ( К темам )
? | 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 |