|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.04.2010, 19:06 | #1 |
Форумчанин
Регистрация: 28.01.2008
Сообщений: 267
|
Передача параметра в поток
здравствуйте, столкнулся с проблемой связанной с потоками, а именно как в поток передать параметр? К примеру:
Код:
Код:
при таком вызове делфя ругается типа [Error] Unit2.pas(36): There is no overloaded version of 'Synchronize' that can be called with these arguments Код:
Не забываем говорить спасибо за помощь - это ведь так приятно
|
05.04.2010, 19:27 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
1. Никакого смысла в потоке нет. Т.к. Synchronize выполняет функцию в главном потоке
2. Synchronize требует функцию без параметров что в вашем случае не верно. Надо FindFileA(); а в нем уже пишите FindFile(Str); 3. Передать параметры элементарно, вы описали собственный класс, кто мешает в нем объявить какие-то переменные (аргументы) ? |
05.04.2010, 19:27 | #3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
05.04.2010, 19:42 | #4 | ||
Форумчанин
Регистрация: 28.01.2008
Сообщений: 267
|
BOBAH13,
Цитата:
Цитата:
Пепел Феникса, эту тему уже читал, т.к. я сталкиваюсь с потоками на практике впервые (ранее только в теории), не совсем понял как там решилась проблема. Вобщем смысл в том, чтобы процедура FindFile(str: String); из главной формы выполнялась в потоке, но обязательно у этой процедуры должен быть параметр Str, т.к. без него мне никак не обойтись, и что бы ее можно было прервать/восстановить по нажатию на кнопку.
Не забываем говорить спасибо за помощь - это ведь так приятно
|
||
05.04.2010, 20:06 | #5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Код:
Код:
|
05.04.2010, 21:11 | #6 |
Форумчанин
Регистрация: 28.01.2008
Сообщений: 267
|
BOBAH13, как бы не совсем то, вот если я делаю мою процедуру без параметра Str, тоесть synchronize(FindFile);, то все работает на ура, но не до конца, как бы процедура выполняется только на 10%, а с параметром Str на 100% (если не загонять в поток).
Не забываем говорить спасибо за помощь - это ведь так приятно
|
05.04.2010, 21:24 | #7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Честное слово, не могу понять кто вам мешает передать Str экземпляру класса потока и выставить Pause = false ? чем не передача параметров ?
p.s. конечно надо будет аккуратней это делать, ну или дополнить код более жесткой синхронизацией. И еще, повторюсь, если вы вызываете FindFile в потоке (функция Execute) и при этом пишите Synchronize(FindFile) то толку от вашего потока НОЛЬ, т.к. тело функции FindFile будет выполняться в главном потоке, для того и сделан Synchronize. |
12.11.2013, 15:30 | #8 |
Новичок
Джуниор
Регистрация: 15.05.2012
Сообщений: 1
|
Извините за некропостинг.
Искал решение, наткнулся на тему, нашел еще одно решение, грех не отписаться. Можно делать вот так чтобы не заводить левые поля Код:
Код:
Последний раз редактировалось DimensionSlider; 12.11.2013 в 16:13. |
13.11.2013, 08:55 | #9 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Так можно делать только в дельфи выше 2009 версии, в которой появились анонимные методы (так правильно называется то , что Вы описываете).
И эта техника никак не зависит от многопоточной технологии, она самостоятельная. |
21.11.2013, 13:28 | #10 |
Регистрация: 09.09.2011
Сообщений: 3
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
передача параметра по ссылке | veter_s_morya | PHP | 7 | 18.10.2009 16:43 |
Передача функции как параметра | ezus | Общие вопросы C/C++ | 2 | 24.08.2009 10:19 |
Передача имени класса как параметра | Квэнди | Общие вопросы Delphi | 14 | 06.04.2009 20:09 |
Передача строки-как параметра-переменной | Иллидан | Общие вопросы Delphi | 13 | 03.10.2008 18:40 |
Передача параметра в поток | joker | Win Api | 10 | 22.12.2007 12:53 |