Форум: "Потрепаться";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизЕсть ли способ Найти похожие ветки
← →
Daniel (2003-10-19 12:31) [0]Допустим, что программа, будет запускаться последовательно несколько раз. Можно ли, например, подсчитать в программе, сколько раз она уже запустилась? Понимаю, 100% метода не существует, но интересно... есть ли более-менее надежный метод? (без использования жесткого диска, естественно).
← →
VID (2003-10-19 12:37) [1]Если цепочка запусков программы не будет прервана перезагрузкой или выключением компа, то может ещё и есть какая то возможность хранить integer-значение в ОЗУ, как это реализовать и возможно ли вообще я не знаю, слово за теми кто знает.
но если же ты и после перезагрузки/выключения захочешь продолжить счётчик, то единственное что остаётся программме, это спросить у пользователя, сколько раз она уже загружалась ;))
← →
Ihor Osov'yak (2003-10-19 12:44) [2]Попыпайся поставить атом на какое-то окно, которое существует постоянно, например на окно десктопа.. Правда, при завершении сессии текущего юзера оно будет все же уничтожено..
← →
Daniel (2003-10-19 12:52) [3]Ihor Osov"yak © (19.10.03 12:44) [2]
Програ консольная. Доступа к WinAPI нет. А вообще ограничиться функциями ANSI C. Т.е. можно ли надеяться, что программу при очередном запуске "поместят" в одно и тоже место в памяти? Естественно, при условии, что в перерывах другие приложения не запускаются.
Например:
program LaunchCounter;
...
var
N: Integer;
...
begin
Inc(N);
writeln(N);
end.
Мечты, конечно.... но какова вероятность, что такой метод сработает?
← →
HolACost! (2003-10-19 13:12) [4]Вероятноть Есть всегда, но это не метод - а фантазия...
Вопрос - зачем?
Что значит доступа к выньапы нет?
← →
Ihor Osov'yak (2003-10-19 13:19) [5]Нет такого понятия "одно и тоже место в памяти" для win32.. Каждая win32 задача выполняется в изолированном виртуальном адресном пространстве.. Которое не существовало до запуска приложения. И в котором, следовательно, ничего не может быть от "прошлых" жизней..
> Доступа к WinAPI нет.
Это как?
> А вообще ограничиться функциями ANSI C.
Ну, во первых, форум немного не тот.. Во вторых - "функциями ANSI C" - это намек на платформонезависимость.. А задачу вы ставите вполне платформозависимую.. Не пойдет так..
← →
blackman (2003-10-19 13:22) [6]Каждый должен оставить свой след в реестре... :)
← →
Daniel (2003-10-19 14:35) [7]Но ведь виртуальное адресного пространство размещается в памяти, которая отже имеет свою "глобальную" адресацию. И размещение этого "виртуального" адр. пр-ва (далее ВАП)осуществляется определенным алгоритмом. Так вот: будет ли мое ВАП размещаться по одному и тому же "глобальному" адресу?
← →
VID (2003-10-19 15:51) [8]to blackman: который на винчестере ;)
← →
Иван Шихалев (2003-10-19 16:04) [9]При перезагрузке, особенно - при холодной, вся оперативная память очищается. Писать в CMOS - а нафига? В общем - зря вы так ЖД не любите...
← →
NightAngel (2003-10-19 22:40) [10]> Daniel (19.10.03 14:35) [7]
Вашу задачу можно попытаться решить с помощью драйвера, загружающегося при старте OS. С этим драйвером и "общаться" из Вашего приложения, а в нём реализовать счётчик запусков (запустили приложение - сообщили это драйверу, он инкрементирует счётчик, нужно определить сколько раз запускалось приложение - обращаетесь к драйверу, возвращается значение счётчика), но это будет работать только до перезагрузки. Есть ещё несколько вариантов, но они уж совсем дикие. А так, как представляете себе Вы, эту задачу не реализовать (у Вас, по моему, очень смутные представления о Flat модели памяти).
> Так вот: будет ли мое ВАП размещаться по одному и тому же "глобальному" адресу?
Никаких глобальных адресов нет. Есть несколько сегментов, а всё остальное строится на страничной адресации, даже переключение контекстов. По каким физическим адресам будут спроецированы эти страничные фреймы знает только OS (зависит от многих факторов, которые для каждой конфигурации индивидуальны). Почитайте что-нибудь о страничной организации памяти для процессоров начиная с i386.
← →
Palladin (2003-10-19 23:36) [11]
> Програ консольная. Доступа к WinAPI нет.
мощное заявление... может имелась в виду не консольная, а DOS программа?
> NightAngel © (19.10.03 22:40) [10]
Слишком сложно. Не нужно пугать :) Достаточно написания сервиса.
Да и в конце концов, кто мешает использовать для хранения счетчика обычные или mapped файлы.
← →
Ihor Osov'yak (2003-10-20 00:19) [12]2 [11] Palladin © (19.10.03 23:36)
Невнимательно читаем постатовку задачи :-):
> (без использования жесткого диска, естественно).
Наверно без флоппиков также..
Ну, а драйвера, сервис - одного плана решения - общий недостаток - нужно дополнительный программный модуль.. Поэтому все же настаиваю на своем предложении - хранение счетчика через атом на постоянно существующем окне, например десктопа, - см. SetProp.. Правда, здесть противоречие дополнению к постановке - "Доступа к WinAPI нет" :-)
2 [10] NightAngel © (19.10.03 22:40)
А вот, если у Вас есть время и воодушевление, то о "диких" способах было бы интересно послушать (хотя бы в 2-3 словах).. Так, в плане образования..
← →
Palladin (2003-10-20 02:19) [13]
> Ihor Osov"yak © (20.10.03 00:19) [12]
Да, не внимателен я.
Мне кажется замечание "(без использования жесткого диска, естественно)" из разряда "Доступа к WinAPI нет".
Религия чтоли не позволяет :)
Согласен, атом при такой постановке задачи - нормальный выбор...
← →
kaif (2003-10-20 02:26) [14]ВОТ У МЕНЯ ОЧИТКА!!!!
УЖЕ В ПЯТЫЙ РАЗ ЧИТАЮ САБЖ КАК
Есть ли способ "оставлять" информацию в памяти между за Кусками?
← →
Reindeer Moss Eater (2003-10-20 08:46) [15]Есть ли способ "оставлять" информацию в памяти между запусками
Если только оставлять, - то легко и просто. Распредели память в куче и не освобождай при завершении работы.
← →
Е-Моё имя (2003-10-20 08:53) [16]
> Есть ли способ "оставлять" информацию в памяти между заКусками?
не к добру это.. =)
← →
MBo (2003-10-20 08:58) [17]заведи Memory-Mapped File в памяти (Dword(-1) вместо дескриптора файла при создании)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c