Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.
Здравствуйте, Den Raskovalov, Вы писали:
DR>Всем привет
DR>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.
Здравствуйте, Den Raskovalov, Вы писали:
DR>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.
Не знаю, как в старых версиях Windows, но под Vista есть вполне надежный и задокументированный способ -- GetFileVersionInfoSize. Просто передавай указатель на свой DWORD в третьем аргументе (lpdwHandle). Вот только не очень удобно то, что нужны еще значения для первых двух аргументов. Но, думаю, несложно будет написать класс-обертку для вызова этой функции с правильными аргументами.
Здравствуйте, pavelzuev, Вы писали:
P>Здравствуйте, Den Raskovalov, Вы писали:
DR>>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.
P>Не знаю, как в старых версиях Windows, но под Vista есть вполне надежный и задокументированный способ -- GetFileVersionInfoSize. Просто передавай указатель на свой DWORD в третьем аргументе (lpdwHandle). Вот только не очень удобно то, что нужны еще значения для первых двух аргументов. Но, думаю, несложно будет написать класс-обертку для вызова этой функции с правильными аргументами.
Большое спасибо. Вполне подходит. Только не получается у ребят из MS, при всем уважении, нормальный API. Пришлось писать обертку. Ну заодно немного обобщил на любые типы. Надеюсь, пригодится:
ммм.... я по ночам хуже соображаю.... это стеб?
Я хотел вставить это в наш проект, но .... на char'ах или short'ах вылетает ассерт.... Кажется, нужно специализировать шаблон и для них
Здравствуйте, Den Raskovalov, Вы писали:
DR>Всем привет
DR>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.
Думаю, правильно будет обнулить unsigned int, затем написать класс, конвертирующий это значение в abstract_unsigned, а потом сделать static_cast в DWORD.
Но это так, краткие наброски, детали с expections и прочими подробностями могут оказаться тут совсем небезынтересными
DR>Всем привет DR>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.
А-а-а-а-а, отжигаете! Автор, давай сразу об стену! Тему в хумор без вариантов
Здравствуйте, Den Raskovalov, Вы писали:
DR>Всем привет
DR>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.
DWORD устарел. Надо писать для DWORD_PTR. Учесть особенности x86 и x64 версий. Принять меры к тому, чтобы получился правильный результат при переносе Windows на BIG_ENDIAN архитектуру . В общем, я думаю, меньше чем парой сотен строк здесь не обойдешься
Здравствуйте, Аноним, Вы писали:
А> DR>Только на 32-битной платформе. А>MAXLONG_PTR вместо MAXLONG и все будет ок
Хм... А когда оно OK будет-то ?
Как я понимаю. MAXLONG_PTR это 2^64-1. В примере расписываем 4-байтниками, тут будут 8-байтники. Итого цикл на 2^64 / 8 == 2^61 итераций. Полагая на одну итерацию 10^-9 сек (что вряд ли выйдет, так как там еще exceptions handling), имеем 73 года.
Я не доживу. А Вы надеетесь ?
With best regards
Pavel Dvorkin
Re[5]: Заполнить DWORD нулями?
От:
Аноним
Дата:
18.08.08 11:04
Оценка:
PD>Как я понимаю. MAXLONG_PTR это 2^64-1. В примере расписываем 4-байтниками, тут будут 8-байтники. Итого цикл на 2^64 / 8 == 2^61 итераций. Полагая на одну итерацию 10^-9 сек (что вряд ли выйдет, так как там еще exceptions handling), имеем 73 года. PD>Я не доживу. А Вы надеетесь ?
Мммда.. не подумал. Надо пробегаться с VirtualQuery по занятым регионам.
Re[5]: Заполнить DWORD нулями?
От:
Аноним
Дата:
18.08.08 12:04
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, Аноним, Вы писали:
А>> DR>Только на 32-битной платформе. А>>MAXLONG_PTR вместо MAXLONG и все будет ок
PD>Хм... А когда оно OK будет-то ?
PD>Как я понимаю. MAXLONG_PTR это 2^64-1. В примере расписываем 4-байтниками, тут будут 8-байтники. Итого цикл на 2^64 / 8 == 2^61 итераций. Полагая на одну итерацию 10^-9 сек (что вряд ли выйдет, так как там еще exceptions handling), имеем 73 года.
PD>Я не доживу. А Вы надеетесь ?
Не надеемся... поэтому мы от злости GUID'ы уникальные генерим, чтобы никому не достались... (;
Re[5]: Заполнить DWORD нулями?
От:
Аноним
Дата:
18.08.08 21:44
Оценка:
PD>Как я понимаю. MAXLONG_PTR это 2^64-1. В примере расписываем 4-байтниками, тут будут 8-байтники. Итого цикл на 2^64 / 8 == 2^61 итераций. Полагая на одну итерацию 10^-9 сек (что вряд ли выйдет, так как там еще exceptions handling), имеем 73 года. PD>Я не доживу. А Вы надеетесь ?
Кстати надо подумать над распараллеливанием. Этот алгоритм легко распараллеливается на любое количество потоков. Интел обещает 80 ядерные процы, они обнулят все дворды всего за один год, что вполне приемлемо в рамках человеческой жизни.
Здравствуйте, Аноним, Вы писали:
А>Кстати надо подумать над распараллеливанием. Этот алгоритм легко распараллеливается на любое количество потоков.
На любое не получится, если память общая для всех потоков.
Re[7]: Заполнить DWORD нулями?
От:
Аноним
Дата:
18.08.08 22:42
Оценка:
P>На любое не получится, если память общая для всех потоков.
Вот, оптимизированный вариант. Быстро обнуляет все DWORDы в указанном процессе. Масштабируется на любое количество процессоров.
P>>На любое не получится, если память общая для всех потоков. А>Вот, оптимизированный вариант. Быстро обнуляет все DWORDы в указанном процессе. Масштабируется на любое количество процессоров.
Еще и отрефакторил