Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.12;
Скачать: CL | DM;

Вниз

Функция в потоке не видит членов своего класса?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
6-35839
aliasman
2002-07-08 09:55
2002.09.12
Глюк в TSocketConnection


14-35903
Constanta
2002-08-19 12:20
2002.09.12
Помогите найти нормально работающий компонент для DDE!


1-35733
АлексейТр
2002-08-30 13:14
2002.09.12
InstallShield - подскажите где найти русское руководство?


3-35603
avr555
2002-08-20 18:26
2002.09.12
Прерывание выполнения запроса


3-35619
kest2
2002-08-22 11:25
2002.09.12
Oшибка!?