Threads

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
alex2233
Сообщения: 5
Зарегистрирован: 20 июн 2005, 09:39

Threads

Сообщение alex2233 » 09 авг 2005, 05:58

Здравствуйте !

Сейчас изучаю Потоки в билдере 5. Подскажите, как справиться с трудностью.

Описание разрабатываемой программы: на форме Windows графически отображается (в Label1) текущее время и рядом кнопка Button1 на закрытие программы.

Предполагаю поместить закрытие программы и отображение времени в отдельные потоки.

Для этого в Unit1.CPP пишу:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Close();
}


Потом создаю новый Unit2.CPP и header file.

В Unit2.CPP прописываю код отображения времени:

void __fastcall Potok1::Execute()
{

int i = 0;

while (i<15)
{
Label1->Caption = Time();
_sleep (1);
Label1->Refresh();

i++;
}
//---- Place thread code here ----
}

В результате получаю сообщение:
[C++ Error] Unit2.cpp(36): E2451 Undefined symbol 'Label1'

Пожалуйста, растолкуйте, в чем моя ошибка и как ее поправить.

С уважением,
Alex

:o ops:

Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сообщение Absurd » 09 авг 2005, 09:01

А чем тебя компонент 'Timer' не устраивает?
Потоки нужно использовать для внутренних частей программы, а не для GUI.
2B OR NOT(2B) = FF

Booster
Сообщения: 5
Зарегистрирован: 17 май 2005, 15:04
Откуда: Санкт-Петербург

Сообщение Booster » 09 авг 2005, 11:16

Absurd,
>Потоки нужно использовать для внутренних частей программы, а не для GUI.
А это почему вдруг? Что-то я такой рекомендации майкрософт не видел;-).

alex2233,
Попробуй так в Unit2.CPP:
>TForm1->Label1->Caption = Time();
TForm1 у тебя скорее всего уже объявлена глобально.
А Label1 всего лишь одно из данных этого объекта, типа объект в объекте.
Label1 в Unit1.CPP ты можеш вызывать потому, что вызываешь его в методах TForm1 и там неявно вызывается указатель "this",
то есть this->Label1->Caption = Time();
Да и не забудь закрыть поток когда закрываешь форму, а то получишь Access Violation.

P.S. Вобще конечно тема названа не совсем корректно.

Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сообщение Absurd » 09 авг 2005, 15:38

[quote="Booster"]Absurd,
>Потоки нужно использовать для внутренних частей программы, а не для GUI.
А это почему вдруг? Что-то я такой рекомендации майкрософт не видел]
Потому что GUI однопоточный везде и как правило требует внешнюю синхронизацию.
2B OR NOT(2B) = FF

Ответить