Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AndreySeVeN
2 / 2 / 1
Регистрация: 06.06.2014
Сообщений: 156
Записей в блоге: 1
#1

ReadProcessMemory медленно читает значение адреса - C++

05.07.2015, 18:06. Просмотров 375. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
while (true)
    {
        if (isRun) {
            try
            {
                ReadProcessMemory(ProcessHandle, (void*)TimeAddress, &Time, sizeof(osuTime), NULL);
                std::cout << Time << std::endl;
            }
            catch (const std::exception&) {}
        }
        Sleep(sleepTime);
    }
Есть таймер, который обновляется каждую миллисекунду. CheatEngine читает адрес нормально даже в интервале "1 миллисекунда", но вот код на C++ не так быстро читает, выводит (std::cout) каждую миллисекунду, но вот значение переменной Time меняется раз в приблизительно 18 миллисекунд. Вот вывод моей программы в консоли:
27589
27589
27589
27624
27624
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2015, 18:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ReadProcessMemory медленно читает значение адреса (C++):

Взятие значение из адреса - C++
Имеется код добавления объекта &quot;точка&quot; в массив точек: void arr_point::add_point(point &amp;p) { point *buf = new point;//Создаю...

Написать программу которая читает из командной строки два аргумента: имя переменной и значение этой переменой - C++
Написать программу которая читает из командной строки два аргумента : имя переменной и значение этой переменой. Если переменная не может...

ReadProcessMemory - C++
ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(fProcess.__dwordClient + Player_Base), &amp;CLocalPlayer, sizeof(DWORD), 0); ...

ReadProcessMemory() Вывести кириллицу в консоль - C++
Здравствуйте, я получил значение &quot;0081D1BAD09ED00B&quot; из ячейки памяти с помощью функции ReadProcessMemory(); char name; ...

Почему при присваивании адреса массива не ставится знак '&' получения адреса - C++
int main() { int a = { 2, 3 }; int* b; b = a; //Почему при присваивании адреса массива не ставится знак '&amp;' получения адреса. ...

В 2-умерном массиве найти адреса максимального числа использовав функцию matrix. Значение передать по ссылке - C++
В 2-умерном массиве найти адреса максимального числа использовав функцию matrix. Значение передать по ссылке. Помогите плз, не могу...

6
AndreySeVeN
2 / 2 / 1
Регистрация: 06.06.2014
Сообщений: 156
Записей в блоге: 1
05.07.2015, 18:09  [ТС] #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
while (true)
    {
        if (isRun) {
            try
            {
                ReadProcessMemory(ProcessHandle, (void*)TimeAddress, &Time, sizeof(osuTime), NULL);
                std::cout << Time << std::endl;
            }
            catch (const std::exception&) {}
        }
        Sleep(sleepTime);
    }
Есть таймер, который обновляется каждую миллисекунду. CheatEngine читает адрес нормально даже в интервале "1 миллисекунда", но вот код на C++ не так быстро читает, выводит (std::cout) каждую миллисекунду, но вот значение переменной Time меняется раз в приблизительно 18 миллисекунд. Вот вывод моей программы в консоли:
Кликните здесь для просмотра всего текста
27589
27589
27589
27624
27624
27624
27624
27624
27624
27624
27624
27624
27624
27624
27624
27624
27624
27624
27641
27641
27641
27641
27641

Как видно, есть некий интервал, когда значение таймера успевает смениться.
P.S. адрес таймера, который я читаю, обновляется раз в 1 мс 100%. Я делал такую же программу на C# и там все работало, переменная time обновлялась каждую миллисекунду (как в CheatEngine).
как решить проблему со чтением адреса?
0
Убежденный
Ушел с форума
Эксперт С++
15689 / 7199 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
05.07.2015, 21:38 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Замените Sleep на что-нибудь другое, например, на какой-нибудь multimedia timer.
У этой функции не такая высокая точность, чтобы выдавать промежутки времени
строго в 1 миллисекунду.
0
AndreySeVeN
2 / 2 / 1
Регистрация: 06.06.2014
Сообщений: 156
Записей в блоге: 1
05.07.2015, 23:02  [ТС] #4
Убежденный, Задержки вывода на консоль нет!!!!! Криво читает адрес.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
05.07.2015, 23:07 #5
Цитата Сообщение от AndreySeVeN Посмотреть сообщение
Убежденный, Задержки вывода на консоль нет!!!!! Криво читает адрес.
Объясни понятным языком что тебе нужно. У тебя в названии темы написано: "ReadProcessMemory медленно читает значение адреса ".
0
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
06.07.2015, 01:13 #6
Когда-то тоже сталкивался с такой же проблемой. Только у меня sleep делал задержку примерно в 12 мс. Но таймер не помог. С помощью таймера я смог достичь только задержки в 1 мс. Возможно, тут будет корректнее сделать через перехват функции, которая обновляет переменную.

И если не ошибаюсь, то try-catch не нужен для ReadProcessMemory.
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
06.07.2015, 13:30 #7
AndreySeVeN, значит в переменную значение заносится раз в 18 мс...
которую вы читаете по данному адресу
1
06.07.2015, 13:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 13:30
Привет! Вот еще темы с ответами:

ReadFile читает диск очень медленно - C++ WinAPI
Здравствуйте! Задача: создание образа флешки в файл. Использую для этого ReadFile. Вот код (С++ Builder 6): void __fastcall...

Дисковод читает диски очень медленно - DVD, Blu-ray
Тормозит сдром. Читает диски очень медленно, что-нибудь установить с компакта невозможно. Шлейф недавно купил новый. Модель привода Тошиба...

Напишите программу, которая читает с клавиатуры числовое значение x и выводит на экран значение функции f(x) - Turbo Pascal
Добрый день! имеется следующая задача: Напишите программу, которая читает с клавиатуры числовое значение x и выводит на экран...

Не читает значение ячейки с таблицы StringGrid - Delphi
Здравствуйте, как не хотел но самому не получается решить эту задачу. Сделал таблицу, накидал в нее данных, и не могу прочитать ячейку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru