Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача парам. в функц. OnTerminate у потока

1.7K
27 апреля 2006 года
ilyes
181 / / 22.02.2006
Здравствуйте! Вопрос такой:

В главной форме создаю поток:

TMyThread *Thrd = new TMyThread(...);
Thrd->OnTerminate = Func;

Как передать параметры в Func, можно ли это сделать без глобальных переменных?
335
27 апреля 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by ilyes
Здравствуйте! Вопрос такой:

В главной форме создаю поток:

TMyThread *Thrd = new TMyThread(...);
Thrd->OnTerminate = Func;

Как передать параметры в Func, можно ли это сделать без глобальных переменных?



Если я правильно понял, то это тот же вопрос, что задавал я. Вот ветка: Передача данных в поток там есть решение.

1.7K
27 апреля 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by enola
Если я правильно понял, то это тот же вопрос, что задавал я. Вот ветка: ...



Не совсем, я читал твою ветку, ты хочел передавать переменную в поток, а я хочу передать переменную в функцию которая находится не в классе потока, а в классе главной формы и вызывается, на сколько я понимаю, после уничтожения потока.

1
27 апреля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by ilyes
Не совсем, я читал твою ветку, ты хочел передавать переменную в поток, а я хочу передать переменную в функцию которая находится не в классе потока, а в классе главной формы и вызывается, на сколько я понимаю, после уничтожения потока.


Наверное тебе нужно более корректно сформулировать свой вопрос - ты хочешь отследить момент завершения потока насколько я понимаю - посмотри здесь

1.7K
28 апреля 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by kot_
Наверное тебе нужно более корректно сформулировать свой вопрос - ты хочешь отследить момент завершения потока насколько я понимаю - посмотри здесь



ААААААААААААААА :x может хватит мне новые задачи придумывать??? Проблема такая:

Есть класс MyThread наследник TThread

Есть класс MyForm наследник TForm - у него есть много всего, но главное у него есть две функции:

MyForm :: Func()
{
//код
}

MyForm :: ButonClick
{
...
TMyThread *Thrd = new TMyThread(/*здесь разные переменные*/);
Thrd->OnTerminate = Func;
...
}

Функция Func начинается после завершения потока Thrd.

И мне не надо в поток передавать переменные, то есть я это умею, мне не надо следить за завершение потока, пусть ОС следит или кто там должен этим заниматься.

А надо передать в функцию Func (которая находится в классе MyForm) одну из тех переменных которые я передаю в конструктор TMyThread, вот и все!!!

Все просто это либо можно сделать, либо нельзя, лично я пока не разу не встречал упомянания об этом.

Если вы встречали какой-нибудь способ это сделать напишите пожалуйста...

Сейчас это реализовано с помощью глобальной переменной и глобального флага.

246
28 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by ilyes

...
А надо передать в функцию Func (которая находится в классе MyForm) одну из тех переменных которые я передаю в конструктор TMyThread, вот и все!!!

Все просто это либо можно сделать, либо нельзя, лично я пока не разу не встречал упомянания об этом.


Ы-ы-ы кто-ж его посадит, он же памятник!

1. OnTerminate имеет тип:
typedef void __fastcall (__closure *TNotifyEvent)(TObject *Sender);
2. Где-то в недрах TThread кусочек кода типа:

...
if(!FOnTerminate)
FOnTerminate(this);
...

так, что все за тебя уже передали.

1.7K
28 апреля 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by GIZMO
Ы-ы-ы кто-ж его посадит, он же памятник!

1. OnTerminate имеет тип:
typedef void __fastcall (__closure *TNotifyEvent)(TObject *Sender);
2. Где-то в недрах TThread кусочек кода типа:

...
if(!FOnTerminate)
FOnTerminate(this);
...

так, что все за тебя уже передали.



То есть вы хотите сказать что я могу исспользовать
все переменные описанные мною в TMyThread, я правильно понял? Если да, то как?

246
28 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by ilyes
То есть вы хотите сказать что я могу исспользовать
все переменные описанные мною в TMyThread, я правильно понял?


Да.

Цитата:
Originally posted by ilyes

Если да, то как?


как обычно через Sender...

1.7K
02 мая 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by GIZMO
Да.


как обычно через Sender...



Если вы имеете в виду
Sender->FuncFromMyThread();
или
(TMyThread)Sender->FuncFromMyThread();
То так я попробовал, не работает, если вы имели в виду др. метод, то напишите пожалуйста.

246
02 мая 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by ilyes
Если вы имеете в виду
Sender->FuncFromMyThread();
или
(TMyThread)Sender->FuncFromMyThread();
То так я попробовал, не работает, если вы имели в виду др. метод, то напишите пожалуйста.


dynamic_cast + Sender, хотя должно и во втором твоем варианте работать. Неработает как, что говорит?

1
02 мая 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by ilyes
Если вы имеете в виду
Sender->FuncFromMyThread();
или
(TMyThread)Sender->FuncFromMyThread();
То так я попробовал, не работает, если вы имели в виду др. метод, то напишите пожалуйста.


 
Код:
((TMyThread*)Sender)->FuncFromMyThread();

or
 
Код:
static_cast<TMyThread*>(Sender)->FuncFromMyThread();
1.7K
03 мая 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by kot_
 
Код:
((TMyThread*)Sender)->FuncFromMyThread();

or
 
Код:
static_cast<TMyThread*>(Sender)->FuncFromMyThread();



О! Ништяк, это именно то! Спасибо огромное!

246
03 мая 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by ilyes
О! Ништяк, это именно то! Спасибо огромное!


Не хочу показаться навязчивым, но при нисходящим приведении типов используется dynamic_cast ...

1.7K
03 мая 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by GIZMO
Не хочу показаться навязчивым, но при нисходящим приведении типов используется dynamic_cast ...



Я не знаю что это, обьясни если не трудно, спасибо.

1
03 мая 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by GIZMO
Не хочу показаться навязчивым, но при нисходящим приведении типов используется dynamic_cast ...


:) Более правильно сказать, что это не очень хорошой стиль программирования - так как static_cast проверяет тип ТОЛЬКО на этапе компиляции. За безопасность надо платить - поэтому при приведении классов более БЕЗОПАСНО использовать dynamic_cast в связи с тем, что проверка выполняется в процессе выполнения и в случае некорректного преобразования сгенерируется исключение которое можно обработать - но при этом соответственно с допзатратами.
Что использовать в конкретном случае - решать надо в конкретной задаче.
Единственно, на что надо обращать внимание - если один тип приведения используется он должен использоваться везде одинаково - а исключения должны быть явно декларированы.

1.7K
03 мая 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by kot_
:) Более правильно сказать...



Все ясно, где-то я это уже слышал, но спасибо что напомнил, теперь наверно больше не забуду.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог