![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
halfhope |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.5.2010 Репутация: нет Всего: нет |
Можно ли как-нибудь реализовать поток в виде ф-ии. Т.е. есть ф-ия, которая берет инфу с сервера. Нужно выполнить её результат. К примеру:
По моему из tasks Ex все вызывалось так.
|
||||
|
|||||
ziga |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 25.4.2007 Репутация: 1 Всего: 1 |
можно попробовать выполнить в таймере делаешь при нажатии на кнопку
а в таймере
|
||||
|
|||||
halfhope |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.5.2010 Репутация: нет Всего: нет |
А Tmr1.OnTimer В потоке работать будет?
|
|||
|
||||
ziga |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 25.4.2007 Репутация: 1 Всего: 1 |
В твоём случае таймер будет выполнять роль потока, в нутри Tmr1.OnTimer поток отдельный создавать не надо, я таймер обычно использую когда на форме с кучей вкладок надо загрузить данные из БД в грид, при этом избежать зависания программы на то время пока эти данные подгрузятся, получается так что при выполнение тяжелого запроса в таймере он продолжает выполнятся при этом зависание не происходит.
Самое главное не забыть при входе в OnTimer сразу же отключать таймер что бы избежать повторного выполнения твоих операций. Это сообщение отредактировал(а) ziga - 21.1.2011, 12:53 |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Какой таймер? Таймер без отдельного потока будет выполнятся в основном потоке. И если GetServerinfo будет ждать информацию, будет "висеть" вся программа.
halfhope, что не дает использовать TThread? Там все очень просто и красиво получится. Это сообщение отредактировал(а) Poseidon - 21.1.2011, 12:57 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
halfhope |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.5.2010 Репутация: нет Всего: нет |
TThread по своей природе не дает выполнить себя как функцию(т.е. чтобы возвращала результат, сразу после запроса). Т.Е. function GetServerinfo(str:string):string; //Сразу получение результата.
А с потоками получиться только процедура и событие procedure getServerInfo(string);//Мы вызовет TThread А при ответе методом synchronize он вернет нам событие. OnServerResponse(result:string); // Получается либо процедура/событие либо ничего. Ни получается сделать у меня в виде ф-ии Слышал в 2009delphi можно отдельно выбранные ф-ии/процедуры в отдельных потоках выполнять. Правда? |
|||
|
||||
Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
И что? Кто мешает запихнуть функцию в процедуру? В общем, как-то так.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
halfhope |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.5.2010 Репутация: нет Всего: нет |
Что то как-то просто, спасибо, посмотрю.
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
И какой смысл тогда в доппотоке, если все выполняется в главном потоке? -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
northener, в главном выполняется только присвоение mmo1.text значения, возвращенного функцией. Сама функция выполняется в отдельном потоке. А что у нас занимает время и заставляет программу "зависнуть"? Именно выполнение функции, а не присвоение ее значения визуальному компоненту.
Добавлено @ 03:36 Хотя сори, правда тормазнул. Вот что значит писать код сразу в браузер не обдумывая его.
Это сообщение отредактировал(а) Poseidon - 22.1.2011, 03:38 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Теперь осталось узнать почему такое решение не устраивает автора. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
halfhope |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.5.2010 Репутация: нет Всего: нет |
Все устраивает, вопрос закрыт, Спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |