Главная страница
    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.008 c
3-35588
Хомо
2002-08-19 10:05
2002.09.12
Фильтрация ?


1-35800
BAHO
2002-08-31 19:00
2002.09.12
Real


14-35900
Ev_genus
2002-08-17 16:24
2002.09.12
Кто такой ламер?


1-35765
pvasya
2002-08-30 15:04
2002.09.12
HOOK на Delphi


3-35558
KAA
2002-08-16 11:51
2002.09.12
2000 Ошибки с транзакцией





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский