![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция в потоке не видит членов своего класса? [D5, Win2k]
AlexanderK2 © (2002-09-02 16:30:00)Создаю поток, используя вызов:
CreateThread(Nil, 0, @TForm1.myFunc, Nil, 0, myT);
объявление в классе:
procedure myFunc(); StdCall;
Работает прекрасно, НО:
myFunc не видит членов своего класса.
Form1.Button1.Caption - так работает
Button1.Caption - так нет.
PS. Без потока все видит.
Дело в том, что в C++Builder все работает.
В C++Builder все просто:
объявляю член класса
static DWORD WINAPI myFunc(LPVOID pMe);
точно такой же вызов
hTr=NULL; // Дескриптор потока
SA = new SECURITY_ATTRIBUTES; // Определение атрибутов потока
SA->bInheritHandle = true;
SA->lpSecurityDescriptor = NULL;
SA->nLength = sizeof(SA);
lpTheadid = new DWORD;
lpStartAddress = myFunc; // потоке
hTr = CreateThread(SA, 0, lpStartAddress, this, 0, lpTheadid);
и тоже самое работает замечательно. А вот как можно сделать это в Delphi?
AlexanderK2 (2002-09-02 18:10:00) [1]Спасибо, получилось.
Надо было просто спросить паскалевский эквивалент this.
PS. Я пробовал работать с TThread, получилось и работало. Но вот работало плохо, а именно наблюдалось приторамаживание. Лучше чем вообще без потока, но все равно заметно, а вот в этом варианте все ОК!
Еще раз спасибо.
Старый Паскалист (2002-09-02 17:40:00) [2]Но в твоей конфигурации:
CreateThread(Nil, 0, @TForm1.myFunc,
{Nil} Self //- сюда идёт параметр, который затем будет
// передан ф-и потока. Поток её рассматривает, естественно,
// как procedure myFunc(Param: Integer); StdCall;
// И Self должен быть ей передан явно
// Кстати, в сишном варианте так и делается.
, 0, myT);
PS Вообще-то в Дельфях принято работать с потоками с помощью
TThread.
PPS Вызывать напрямую CreateThread Рихтер не советует.
Обычно при создании потока требуется некоторая инициализация
обработки исключений, RTL и чего-то подобного.
В дельфи на этот случай есть ф-я BeginThread (там - учти - тебуется ф-я fastcall).