CallBack-функции

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 14:21
Откуда: Беларусь, Минск

CallBack-функции

Сообщение mike_ch »

Здравствуйте!
Буду очень признателен тому кто на простом примере объяснит использование callback-функций. Попробую сначала описать задачу, для решения которой, как мне кажется, необходимо использовать именно такой механизм.

Есть modul.exe и modul.dll. Из modul.exe вызываем функцию func1(), которая находится в modul.dll. Функция func1() содержит какой-то цикл loop .. end. Необходимо прервать выполнение данного цикла, нажатием на button в modul.exe.

Не пинайте пожалуйста, если спрашиваю элементарное.
kreator
✯ Ветеран ✯
Сообщения: 5158
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: CallBack-функции

Сообщение kreator »

Не надо никаких callback функций. Функцию func1 запускаешь в отдельном thread, в другом окне посылаешь этому треду Event:CloseWindow. Единственное, не забыть в loop поставить оператор yield.
А, вообще, это всё неправильно. Нужно сделать, как в Process, или воспользоваться классом Process.
We are hard at work… for you. :)
mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 14:21
Откуда: Беларусь, Минск

Re: CallBack-функции

Сообщение mike_ch »

func1() запускаю по start'у, но это не оконная процедура, поэтому отправить ей event не получится. Можно было бы воспользоваться TerminateProcess, но как получить handle? Сам понимаю, что Process мне в помощь, но до конца еще не разобрался.
gromov
Старожил
Сообщения: 280
Зарегистрирован: 11 Февраль 2009, 8:41
Откуда: г. Анапа
Поблагодарили: 3 раза

Re: CallBack-функции

Сообщение gromov »

Если у DLL и EXE общий словарь, то объяви в нем переменную-флаг. Тред его должен видеть. В основном потоке, когда надо сбрасывай его в 0, а в треде проверка, если 0, то выход из цикла.
mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 14:21
Откуда: Беларусь, Минск

Re: CallBack-функции

Сообщение mike_ch »

Проблема решилась вообще элементарно. В функции сделал еще один параметр указатель на long - func1(..., <*long brakecode>). И в цикле проверяю его значение. В главном процессе

Код: Выделить всё

brakecode long
refbrakecode &long

brakecode = 0
refbrakecode &= brakecode
func1(..., brakecode)
refbrakecode = 1 соответственно и в func1 brakecode = 1
kreator
✯ Ветеран ✯
Сообщения: 5158
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: CallBack-функции

Сообщение kreator »

Пара замечаний.
1. Loop без вывода информации о том, что происходит - не есть хорошо.
2. Как насчёт yield? По-моему без него не получится.
We are hard at work… for you. :)
Ответить