Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.45 MB
Время: 0.027 c
1-35697
Yaro
2002-09-01 07:49
2002.09.12
Потомки и родители


7-35923
anton_private
2002-06-07 15:57
2002.09.12
Как зарегистрить ActiveX компонет в runtime?


6-35840
Arkady
2002-07-05 11:05
2002.09.12
Пароль доступа


1-35812
978658473
2002-09-01 12:28
2002.09.12
TLabel + копирование.


3-35544
Napalm
2002-08-20 03:51
2002.09.12
InterBase + Blob





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский