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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 16:29   #1
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию Почему так медленно работает цикл?

Почему медленно работает цикл?
Вот код (причем сталкиваюсь не первый раз с таким):
Код:
int main()
{
//Ищет значения dword в памяти
	DWORD aaaa = 4112, value = 43910045;
	DWORD bytesread;

	HANDLE process_h;

	process_h = OpenProcess(PROCESS_ALL_ACCESS, 0, aaaa);

	if (process_h != 0)
	{
		DWORD* addr;
		DWORD* aaaa2[2];
		MEMORY_BASIC_INFORMATION mbi;
		addr = 0;

		DWORD* buf = new DWORD[1000000 * 16];
		ReadProcessMemory(process_h, (LPCVOID)0x18000000, buf, 1000000*4*16, &bytesread);

		unsigned long i = 0;
		for (;;)//Тут медленно работает
//for (unsigned long i = 0;i<16000000;i++) - так же медленно работает
		{
			if (i == 16000000)
			{
				break;
			}

			if (buf[i] == value)
			{
				printf("%08x\n", i * 4 + 402653184);
			}
			i++;
		}

		delete[] buf;
	}
	printf("End");
	Sleep(9999999);

	return 0;
}
К примеру:
После старта цикла - жду несколько секунд, потом ставлю бряк чтобы посмотреть чему равняется i, и i равняется очень маленькому значению (меньше 5000)(когда оно должно было быть в несколько раз больше это точно)
zotox вне форума Ответить с цитированием
Старый 09.01.2011, 19:19   #2
Flyasd1
Пользователь
 
Регистрация: 06.01.2011
Сообщений: 11
По умолчанию

А у тебя часто выводится в консоль printf("%08x\n", i * 4 + 402653184);? Вывод в консоль это довольно длительная операция.
Flyasd1 вне форума Ответить с цитированием
Старый 09.01.2011, 22:13   #3
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

поставь вывод в консоль на второй поток,который работает с Sleep(500), или вообще выключи вывод, и посмотри
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 09.01.2011, 23:57   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ага, в консоль долго выводится, попробуй так:
Код:
printf("begin test\n");
for(i=0; i<10000000; i++);
printf("test completed\n");
NiCola999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл Cardinal - почему так происходит? Nester Общие вопросы Delphi 2 28.07.2010 15:04
Почему не работает цикл? Marsik Помощь студентам 0 18.11.2009 15:01
Почему запрос работает медленно _SERGEYX_ БД в Delphi 1 24.10.2008 17:30
Почему не работает цикл????? Marsik Помощь студентам 2 22.06.2008 14:16
Почему ХОR работает медленно? Иллидан Помощь студентам 5 01.05.2008 14:51