Показать сообщение отдельно
Старый 06.04.2012, 22:01   #2
Платон Александрович
Нуждающийся
 
Аватар для Платон Александрович
 
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений
(для 83 пользователей)
Ответ: Использование FastPointer

Сообщение от Halk-DS Посмотреть сообщение
	Goto skip
	MyFunctionFirst(); Тогда зачем это?
	.skip
Вычисление адреса функции с помощью этой библиотеки сделано "хаком", по сути дизассемблируется вызов функции и достается адрес. Чтобы функция при этом не выполнилась, ее вызов пропускается с помощью Goto (но код вызова при этом остается, из которого и достается адрес выше функцией FunctionPointer)

Сообщение от Halk-DS Посмотреть сообщение
;Вот это место как я понял должно мне сообщить что то очень важное...
;Но погуглив я понимаю только что Hex() переводит число в 16численную систему
;А саму суть не уловил.
Print "First function pointer: $"+Hex(MyFunctionFirstPointer)
Print "Second function pointer: $"+Hex(MyFunctionSecondPointer)
КЭП сообщает что тут печатаются адреса полученных функций

Сообщение от Halk-DS Посмотреть сообщение
Так хде ш тут многопоточность?
С чего вдруг тут должна быть многопоточность? Ты всего-лишь получил адеса функций, само выполнение их как было в главном потоке, так и осталось. Адреса же полученных функций ты можешь передать куда-нить, где по ним будут эти функции вызываться, например уже в другую библиотеку, которая будет создавать отдельные потоки, внутри которых и будут вызываться твои функции.
Сообщение от Halk-DS Посмотреть сообщение
Помогите пожалуйста понять, как в принципе устроена многопоточность и в частности эта библиотека?
Приветствуется посылания на хорошие статейки...
В гугле забанили?
Если кратко
Есть процесс, у него есть основной поток, и может быть несколько побочных потоков.
Проще говоря каждый поток представляет собой функцию.
Потоками рулит операционная система.
Можно насильно указать потоку на каком процессоре ему выполняться, иначе это решает система и ее планировщик.
Планировщик отдает каждому процессу и потоку определенное кол-во процессорного времени, понемногу продвигая каждый из потоков\процессов (виртуальная мультипоточность).
Т.к. потоки работают параллельно, общение между ними (чтение\запись данных) нужно синхронизировать, для этого в системе существуют несколько вещей (критические секции, мутексы, семафоры, атомарные операторы и т.п.)
В случае с блицем тебе нужно передать полученый адрес в функцию создания потока (в винде это CreateThread, в этой библиотеке кстати так-же называется ), так-же нужно позаботиться о том, чтобы передать в поток определенные данные (в той же системный CreateThread можно указать адрес блока памяти).

Вообще в fastpointer есть два примера работы с потоками - Example_ThreadUse и Example_ThreadUse2, смотри их.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Платон Александрович за это полезное сообщение:
Hulk-DS (07.04.2012), St_AnGer (07.04.2012)