Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
ВнизФункция в потоке не видит членов своего класса? Найти похожие ветки
← →
AlexanderK2 (2002-09-02 16:30) [0]Создаю поток, используя вызов:
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?
← →
Старый Паскалист (2002-09-02 17:40) [1]Но в твоей конфигурации:
CreateThread(Nil, 0, @TForm1.myFunc,
{Nil} Self //- сюда идёт параметр, который затем будет
// передан ф-и потока. Поток её рассматривает, естественно,
// как procedure myFunc(Param: Integer); StdCall;
// И Self должен быть ей передан явно
// Кстати, в сишном варианте так и делается.
, 0, myT);
PS Вообще-то в Дельфях принято работать с потоками с помощью
TThread.
PPS Вызывать напрямую CreateThread Рихтер не советует.
Обычно при создании потока требуется некоторая инициализация
обработки исключений, RTL и чего-то подобного.
В дельфи на этот случай есть ф-я BeginThread (там - учти - тебуется ф-я fastcall).
← →
AlexanderK2 (2002-09-02 18:10) [2]Спасибо, получилось.
Надо было просто спросить паскалевский эквивалент this.
PS. Я пробовал работать с TThread, получилось и работало. Но вот работало плохо, а именно наблюдалось приторамаживание. Лучше чем вообще без потока, но все равно заметно, а вот в этом варианте все ОК!
Еще раз спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.007 c