Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сохранять состояния программы?

489
02 апреля 2010 года
NeO_u
277 / / 11.10.2006
Собственно сабж.
Каким образом возможно сохранять состояния программы?

Обрисую ситуацию:
Есть в программе процесс, который состоит из Х этапов. Допустим, по середине одного из этапов выключился свет/перепад питания и прочая фигня. В общем, комп перестал работать.
Что необходимо сделать, что бы при запуске, программа определила на каком этапе была остановлена + в каком месте этого этапа...

Может быть какие-то дампы памяти делать или еще как-нибудь?


ЗЫ: Заранее спасибо за ответы/советы.
253
02 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Проще по-моему самому программно периодически сохранять контекст работы (позицию в каком-то файле и т.д).
8.4K
02 апреля 2010 года
z0rch
275 / / 02.09.2008
мое мнение:
Если этапов много, они короткие и результат каждого этапа сохраняется на ЖД - например скачивание файла маленькими кусочками - просто можно вести лог, например:
этап №_ начался:скачано х. этап №_ закончен:скачано у.
если же результаты этапов не сохраняются в постоянной памяти - например математическое вычисление - дамп памяти как вариант пойдет.
489
02 апреля 2010 года
NeO_u
277 / / 11.10.2006
Нет. Этапы не сохраняются нигде. Основная проблема в том, что это идет работа с железом. Текущее состояние железа у меня хранится в памяти. Вот, по-этому я и подумал. что может быть стоит делать дамп памяти.
Но тогда вопрос, есть ли какая-то дока по этому делу, как делать этот дамп, а потом с него восстанавливаться, если он имеется...?

Все это под платформу .NET.

Может быть и проще сохраняться в файле этап работы...Только опять же хотелось бы примерчик или алгоритм записа/восстановления работы.

Просто я в этом еще совсем не шарю. Это будет первая попытка создать систему восстановления программы :-D
307
02 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: NeO_u
Основная проблема в том, что это идет работа с железом.



вы работаете на шарпе с железом? а можно подробней, если не секрет!

5
02 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Artem_3A
вы работаете на шарпе с железом? а можно подробней, если не секрет!


Вероятно, вызов библиотек на C.

307
02 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: hardcase
Вероятно, вызов библиотек на C.



возможно, но все таки хотелось бы поподробней!

и в смысле хранишь состояние в памяти, есть некий объект, некоего класса, который хранит состояние железяк? тогда можно просто сереализовать данный объект с какой то периодичностью.

489
02 апреля 2010 года
NeO_u
277 / / 11.10.2006
Цитата: hardcase
Вероятно, вызов библиотек на C.



Да. Вызов библиотек на С.+ часть железа работает по ком-порту, по-этому можно заюзать C#, главное, правильно все написать :).

489
02 апреля 2010 года
NeO_u
277 / / 11.10.2006
Цитата: Artem_3A
и в смысле хранишь состояние в памяти, есть некий объект, некоего класса, который хранит состояние железяк? тогда можно просто сереализовать данный объект с какой то периодичностью.



Можно. Но это состояние железки сохранит. Но у меня еще есть алгоритм, который мне тоже надо как-то сохранять, точнее на каком этапе этого алгоритма программа остановилась...вот этот момент для меня вообще не понятен.

253
02 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Я всё же не пойму, как мы тут сможем помочь. Программу же ты пишешь, какие алгоритмы и что она делает тоже только ты знаешь. Либо сохраняешь какие-то переменные, отвечающие за текущий прогресс алгоритма, либо думаешь, как сделать дамп...
489
02 апреля 2010 года
NeO_u
277 / / 11.10.2006
Цитата: Proger_XP
Я всё же не пойму, как мы тут сможем помочь. Программу же ты пишешь, какие алгоритмы и что она делает тоже только ты знаешь. Либо сохраняешь какие-то переменные, отвечающие за текущий прогресс алгоритма, либо думаешь, как сделать дамп...



Ну, мне бы теорию по созданию этих самых дампов :)
Т.е. есть же книжки по теории создании точек восстановления программ, или как-то так :)

307
03 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: NeO_u
Ну, мне бы теорию по созданию этих самых дампов :)
Т.е. есть же книжки по теории создании точек восстановления программ, или как-то так :)



ну во первых, а вам действительно так уж прям необходимо делать этот дамп? если вы работаете через комп порт, то при отключении питания скорее всего и железяка сбросит свое состояние, то бишь алгоритм придется начинать заново. да и вообще...

во вторых, если ваш алгоритм состоит из н некоторых этапов, то не проще ли по завершению текущего и перед началом следующего писать в мего файлик номер этапа и текущие состояние железки, рабочие данные? по завершении алгоритма, если он отработал без приключений файл удалять, при старте, если файл есть, то читать его и переходить на последний удачный этап, или же как более правильно будет судить о завершении по конфигурационному файлу приложения. или можно реализовать для этого класс состоянии и сериализовать его, или использовать для этого конфигурационные данные, или банально просто писать в файл. зачем себе усложнять жизнь?

253
03 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: Artem_3A

ли по завершению текущего и перед началом следующего писать в мего файлик номер этапа и текущие состояние железки, рабочие данные?


Об этом я тоже пытаюсь сказать. Да и потом (трудно однако работать телепатчески), если используются файлы, какие-то объекты ОС и пр. - всё это нужно будет переоткрывать заново при возобновлении работы, т.е. волшебный дамп просто так не поможет начать с пустого места - открытые дескрипторы потеряются в любом случае (если конечно не озаботиться предварительным дампом всей памяти ОС, вроде как это делается в спящем режиме :rolleyes:).

307
03 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: Proger_XP
Об этом я тоже пытаюсь сказать. Да и потом (трудно однако работать телепатчески), если используются файлы, какие-то объекты ОС и пр. - всё это нужно будет переоткрывать заново при возобновлении работы, т.е. волшебный дамп просто так не поможет начать с пустого места - открытые дескрипторы потеряются в любом случае (если конечно не озаботиться предварительным дампом всей памяти ОС, вроде как это делается в спящем режиме :rolleyes:).



сорри, если продублировал твою мысль!=)

а вообще мне прям очень сильно кажется, что это все не обосновано и не нужно!

5
03 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: NeO_u
Ну, мне бы теорию по созданию этих самых дампов :)
Т.е. есть же книжки по теории создании точек восстановления программ, или как-то так :)


Могу посоветовать обратиться к чему-то вроде "продолжений" (continuations). .NET не позволяет оперировать такими абстракциями на уровне платформы, потому народ изготавливает велосипеды - Undo-Redo стеки. Напротив, Mono позволяет работать с продолжениями, с помощью которых можно сотворить вашу магию сохранения состояния.

1.8K
03 апреля 2010 года
LM(AL/M)
332 / / 20.12.2005
Цитата: Proger_XP
...если конечно не озаботиться предварительным дампом всей памяти ОС, вроде как это делается в спящем режиме...


я так понял автор хочет сделать "спящий режим" для отдельной прожки, по моему овчинка того не стоит но если уж очень хочется могу предложить на пробу один изврат: что если воспользоваться файлом отображённым в память и разместить в этой памяти все структуры которыми оперирует алгоритм -- может в этом случае удастся при перезапуске автоматом вернуться в некоторое промежуточное состяние?

5
03 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: LM(AL/M)
что если воспользоваться файлом отображённым в память и разместить в этой памяти все структуры которыми оперирует алгоритм -- может в этом случае удастся при перезапуске автоматом вернуться в некоторое промежуточное состяние?


Вы понимаете, что при всем этом неким образом функционирует сборщик мусора?

А овчинка выделки стоит - нужно просто пользоваться соответствующими инструментами.

1.8K
03 апреля 2010 года
LM(AL/M)
332 / / 20.12.2005
Цитата: hardcase
Вы понимаете, что при всем этом неким образом функционирует сборщик мусора?


понимаю но не вижу в этом аргумента "против"
надо признать: при желании мы сможем разместить объекты в нужном блоке и оперировать с ними там а сложность способов освобождения этих объектов принципиально не препятствует реализации того что я предложил

Цитата:
А овчинка выделки стоит - нужно просто пользоваться соответствующими инструментами.

-- расскажите пожалуйста про инструменты

5
03 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: LM(AL/M)
понимаю но не вижу в этом аргумента "против"
надо признать: при желании мы сможем разместить объекты в нужном блоке

Не можем. Это управляемый код.

Цитата: LM(AL/M)
расскажите пожалуйста про инструменты

На формальный подход и кое какие инструменты я давал ссылки выше.

1.8K
04 апреля 2010 года
LM(AL/M)
332 / / 20.12.2005
Цитата: hardcase
Не можем. Это управляемый код

разве кто-то накладывал ограничение использовать только управляемый код?

241
04 апреля 2010 года
Sanila_san
1.6K / / 07.06.2005
И всё-таки, что за железки? Просто если это, скажем, модем - тогда он наверняка сбросится. А если это станок с ЧПУ, то он наверняка просто зависнет в положении, последнем на момент выключения света. Если не используется COM-порт, то какой используется? Хранит ли устройство своё последнее состояние?
5
04 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: LM(AL/M)
разве кто-то накладывал ограничение использовать только управляемый код?


Посмотрите на раздел, в котором расположена тема, автор также упоминал, что использует C#.

1.8K
04 апреля 2010 года
LM(AL/M)
332 / / 20.12.2005
Цитата: hardcase
Посмотрите на раздел, в котором расположена тема, автор также упоминал, что использует C#.



и .Нет и Си# позволяют создавать unsafe-код так что давайте больше не будем отклоняться от темы

307
04 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: LM(AL/M)
и .Нет и Си# позволяют создавать unsafe-код так что давайте больше не будем отклоняться от темы



да вы о чем вообще!=\ даже с использование небезопасного кода возможности шарпа при работе с железом(в любом виде) столь примитивны, что о них даже упоминать не стоит, собственно как и любого языка высокого уровня.

соглашусь с hardcase, используешь шарп использую грамотно средства донет и ни каких велосипедов, все равно велосипед сей получится квадратным и ни разу не рабочим.

253
04 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: Artem_3A
да вы о чем вообще!=\ даже с использование небезопасного кода возможности шарпа при работе с железом столь примитивны, что о них даже упоминать не стоит, собственно как и любого языка высокого уровня.


Рискуя удариться в флейм надо тем не менее заметить, что смысл писать на шарпе, если половина проги будет использовать unsafe mode?
Вообще, автор темы по-моему давно покинул нас...

5
04 апреля 2010 года
hardcase
4.5K / / 09.08.2005
В порядке флейма.
Цитата: LM(AL/M)
и .Нет и Си# позволяют создавать unsafe-код так что давайте больше не будем отклоняться от темы


Unsafe-код это ни разу не синоним "неуправляемого кода". Это так же не значит возможности ручного управления памятью. Unsafe-код позволяет выполнять адресную арифметику и дает некоторый аналог сиплюсплюсного reinterpret_cast-а.

Цитата: Artem_3A
возможности шарпа при работе с железом(в любом виде) столь примитивны, что о них даже упоминать не стоит, собственно как и любого языка высокого уровня.

Тем не менее написать ОС на C# возможно и вполне реально.
Я все не могу понять что значит "работа с оборудованием"? Любая работа с переферийным железом, как правило, сводится к чтению-записи отображенной на оперативную память внутренней памяти железяки. Если подходить к вопросу с этого бока, то ЛЮБОЙ другой язык, поддерживающий адресную арифметику, от C# практически ничем не отличается.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог