Сообщение от 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, смотри их.