Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2011, 13:35   #1
N-Cat
Пользователь
 
Регистрация: 23.02.2011
Сообщений: 21
По умолчанию Перехват функции с заменой

Добрый день!

Пишу тесты для приложения, в своем потоке.
Скажите, возможно ли, когда выполняется функция в основном треде, заменить ее на свой код в своем потоке?

То есть в моем потоке, вместо того чтоб выполнять свой код, функция выполняет тот который я напишу.

Можно конечно обернуть иф-дефом мой код и впихнуть его прямо в функцию, но как-то хочется минимально вонзатся
N-Cat вне форума Ответить с цитированием
Старый 08.06.2011, 14:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
когда выполняется функция в основном треде, заменить ее на свой код в своем потоке?
Да. Почитай о том как описываются и реализуются события в любой книге по Делфи.
Или посмотри как описаны события в компонентах стандартных, ибо то о чем ты говоришь именно работа для событийной модели.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.06.2011, 14:38   #3
N-Cat
Пользователь
 
Регистрация: 23.02.2011
Сообщений: 21
По умолчанию

Дело в том, что пишу я на с++, а там, кажется, событий нет...
N-Cat вне форума Ответить с цитированием
Старый 08.06.2011, 14:44   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Есть. Делегаты если не ошибаюсь им название.
http://www.functionx.com/cppcli/classes/Lesson15c.htm
http://www.codeguru.com/cpp/cpp/cpp_...icle.php/c4119

Есть и подробнее на русском в книгах по Си и CLR.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.06.2011, 15:04   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
CLR.
и зачем человека в dotNET посылаешь?

делегаты в С++ есть, но там в силу строгой типизации это не очень, но возможно все естественно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.06.2011, 15:07   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

N-Cat

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

можно, с использованием полиморфизма.
сейчас в твоём коде скорее всего сильные перекрёстные связи, делающие его непригодным для тестирования. читать про паттерн Inversion of Control
Rififi вне форума Ответить с цитированием
Старый 08.06.2011, 15:17   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
и зачем человека в dotNET посылаешь?
Ну я... это... того... Все равно полезно таки почитать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.06.2011, 15:39   #8
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> возможно ли, когда выполняется функция в основном треде, заменить ее на свой код в своем потоке?

Невозможно.
Для этого следует как минимум остановить тред, фрагмент кода которого требуется изменить. В противном случае результат запросто может быть плачевным. сродни выбиванию табуретки из под ног чела, вкручивающего лампочку в люстру под потолком)
mss вне форума Ответить с цитированием
Старый 08.06.2011, 16:59   #9
N-Cat
Пользователь
 
Регистрация: 23.02.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
> возможно ли, когда выполняется функция в основном треде, заменить ее на свой код в своем потоке?

Невозможно.
Для этого следует как минимум остановить тред, фрагмент кода которого требуется изменить. В противном случае результат запросто может быть плачевным. сродни выбиванию табуретки из под ног чела, вкручивающего лампочку в люстру под потолком)
Для этого вроде критические секции существуют
N-Cat вне форума Ответить с цитированием
Старый 08.06.2011, 18:02   #10
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Для этого вроде критические секции существуют
А вход в крит.секцию - это, по-твоему, не код ?)
Один поток выполняет код входа в КС, другой в этот же момент модифицирует этот код, подменяя его на хз какой, никак не согласуя свои манипуляции с первым потоком - в рез-те GPF-грабли ).. Как тебе такая перспективка ?)

КС предназначены, в первую очередь, для защиты неразделяемых ресурсов. Код же, особливо генерируемый загрузчиком в АП процесса в load-time, назвать ресурсом язык не поворачивается)

Последний раз редактировалось mss; 08.06.2011 в 18:06.
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с заменой символов ZET78 Общие вопросы C/C++ 0 19.09.2010 21:04
Поиск файла и копирование с заменой tarakan1983 Общие вопросы Delphi 11 29.04.2010 15:14
Помогите с заменой!!! olview Microsoft Office Excel 7 04.12.2009 10:35
Помогите с заменой 12-часового времени на 24 Bakli Свободное общение 6 24.06.2009 19:46
Поиск с заменой! MAKEDON Общие вопросы C/C++ 1 15.04.2009 22:02