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

Востановление состояния программы после завершения - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
03.11.2013, 00:03     Востановление состояния программы после завершения #1
Здорова господа!!!

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

От если прога отработала 10 часов и не успела выполнить все задания нужно при повторном запуске проги, что бы она восстановила свое прежнее состояние и начала работать с того места где она остановилась через 10 часов (примерно)

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

Прога парсер парсит сайты, ну она очень медленно работает примерно скорость 2к статей за 10 часов и от если я поставлю в настройках спарсить сайт размером 10 - 20к страниц, то она будет работать несколько суток, пока она работает в непрерывном режиме, но если что то случается непредвиденная ситуация, то она не может восстановить состояние. От щас не знаю как бы его правильно сделать - восстанавливать при выключении состояние или при перезапуске.

Да такое ж произойдет если в настройках поставлю спарсить 10 сайтов по 300 статей, тоже при обрыве, она уже не сможет востановиться, а начнет парсить с тех сайтов которые уже спарсила, ну короче если два спарсила, то при перезапуске заново будет их парсить.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
03.11.2013, 00:03     Востановление состояния программы после завершения #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Да такое ж произойдет если в настройках поставлю спарсить 10 сайтов по 300 статей, тоже при обрыве, она уже не сможет востановиться, а начнет парсить с тех сайтов которые уже спарсила, ну короче если два спарсила, то при перезапуске заново будет их парсить.
ты парсишь то ведь где то сохраняешь результаты???
ну вот и обзови файл именем сайта, IP адреса
например 192_168_0_1.txt
а потом при загрузке анализируй какие файлы созданы те сайты обходишь
можно еще в имя файла добавить метку в конце _ххх сколько процентов обработано
этим ты защитишься от того кгда сайт не полностью обработан
в общем идея такая результаты в файл а ключ в имени файла
Крюгер
 Аватар для Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 409
Записей в блоге: 3
03.11.2013, 00:11     Востановление состояния программы после завершения #3
ninja2, да на счет меток я думаю то самое. но не проще ли на отдельные файлы всё это разбивать?
(вот например есть прога shareman да и другие лоадеры...там всё скачанное в файл и записывается (ориентация видимо происходит по каким то меткам.) но т.к вы парсите сайты то, скорее всего вам потребуется составлять и древовидную структуру самого сайта и тоже записывать ( чтоб потом метки искать можно было)

Добавлено через 5 минут
и да, потом можно для этого дела viever создать (основываясь на карту, и метки в файлах)
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
03.11.2013, 00:41  [ТС]     Востановление состояния программы после завершения #4
Цитата Сообщение от ValeryS Посмотреть сообщение
ты парсишь то ведь где то сохраняешь результаты???
ну вот и обзови файл именем сайта, IP адреса
например 169_168_0_1.txt
Ну я парсю не с конкретного сайта, а выдачу гугла и статьи загружаются с разных сайтов, у меня просто вначале парсятса названия разделов сайта, затем названия подразделов, это все массивы, а затем уже по названию подразделов парсится выдача гугла и я уже по ссылкам перехожу и распарсиваю статьи.
Но ладно, тут уже мне сначала похоже нужно проверять сами настройки программы, количество сайтов либо 1 либо больше, то нам нужно в файле с меткой считать номер сайта (сайты номеруются по папкам) и дальше делать восстановление как для одного сайта.

Там у меня просто такой алгоритм что сначала создается файл с именами разделов, затем создаеться файл с именами подразделов, а затем уже только статьи начинают парситься. Походу нужно востановление делать как то фиг его знает. Ладно лучше большой сайт возьмем на 10к страниц, от парсер разделы и подразделы к нему он за час спарсит, он 2к разделов парсит примерно за час - два, тут востановление не нужно, час два это не много времени можно и перезапустить, от долго статьи парсяться, Тут нужно как то с сохранением статьи перезаписывать файл метку(он будет проверяться в конструкторе, его существование). ну от например что то типо три числа 3 5 3, будет означать что была последней скопирована статья к 3-му - разделу 5-му подразделу и номер 3 статья. При перезапуске конструктор должен проверить существование файла метки, ага есть считал файл в котором записаны разделы, потом считал файл в котором записаны подразделы и дальше нужно инициализировать переменные функции числами из метки что б цикл восстановился на нужном месте, да плюс еще нужно массив урлов на которых уже переходи не в памяти держать а в файл где то писать и потом считать при восстановлении. Да трудно все это представляется, наверно схему предется рисовать.

Еще походу нужно сам файл_меток должен показывать конец программы, что типо уже все считалось.

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

Да это еще все придется протестить на ошибки, да ппц просто. И все это смутно представляется.

Добавлено через 12 минут
Цитата Сообщение от Крюгер Посмотреть сообщение
и да, потом можно для этого дела viever создать (основываясь на карту, и метки в файлах)
А что это такое?
Цитата Сообщение от Крюгер Посмотреть сообщение
но т.к вы парсите сайты то, скорее всего вам потребуется составлять и древовидную структуру самого сайта и тоже записывать
Ну да походу просто, у меня то все дерево парситься быстро за час и записано, да походу мне можно просто записать два числа без номера статьи номер раздела записать и номер подраздела, а затем при востановлении просто уже считать все разделы и все подразделы и заново начать парсить статьи к разделу на котором оно оборвалось, те статьи что спарсились, но в не полном количестве они просто перезапишуться, это мелочь по времени, ну пусть их там будет 100 я думаю максимум это мелочь каких то там полчаса час, но в подразделах как правило будет примерно 7 - 20 статей, так что две цифры достаточно записывать. Тут уже ясно и в принципе просто осуществить.

Давайте теперь разберемся с определением деструктора, что у нас будет деструктор делать? я понимаю деструктор вызывается если я сам закрою прогу, тогда мне нельзя в деструкторе делать удаление метки, мне походу нужно создать специальную функцию, которая будет после завершения всех заданий удалять метку и выведет сообщение что все сделано. Ну она будет вызываться после отработки все функций которые парсят (всех циклов). Да яснее становиться, даже проблемой уже не кажеться.
Крюгер
 Аватар для Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 409
Записей в блоге: 3
03.11.2013, 00:48     Востановление состояния программы после завершения #5
ninja2,
Цитата Сообщение от ninja2 Посмотреть сообщение
Сообщение от Крюгер
и да, потом можно для этого дела viever создать (основываясь на карту, и метки в файлах)
А что это такое?
это я имел в виду просмотрщик удобный для файла (мб написал не так)

Добавлено через 1 минуту
и для начала наверное стоит придумать структуру вашего файла / файлов
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
03.11.2013, 01:00  [ТС]     Востановление состояния программы после завершения #6
Тут еще так если подумать можно в код не все добавлять, а например до создания объекта проверять существования файла_метки, а затем уже если существует метка вызвать конструктор допустим преобразования который синициализирует объект нужными значениями, это что б не проверять в конструкторе по умолчанию, а дальше? А дальше видимо так же все пойдет по том же алгоритму.

Походу ничего лучше не придумаешь как проверять в одном и том же конструкторе просто всю инициализацию-восстановления оформить в отдельной private функции и интегрировать проверки флага в функцию которая строит саму программу. Ладно сделаю по простому.

Добавлено через 3 минуты
Цитата Сообщение от Крюгер Посмотреть сообщение
и для начала наверное стоит придумать структуру вашего файла / файлов
Да все придумано, просто программа разрослась 1.7 строк кода плюс если все это допишу и там еще нужно несколько функций доделать будет 2.5 примерно. Но уже трудно шарить по коду, куда что вписывать, он весь в одном файле находиться, было б хорошо что б можно было файл в двух вкладках открыть в одном и том же редакторе, а так приходиться листать бывает сверху вниз или наоборот, что б подредактировать какую нить функцию не удобно.

Прога мелкая, а коде уже трудно ориентироваться.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
03.11.2013, 01:06     Востановление состояния программы после завершения #7
Цитата Сообщение от ninja2 Посмотреть сообщение
он весь в одном файле находиться, было б хорошо что б можно было файл в двух вкладках открыть в одном и том же редакторе, а так приходиться листать бывает сверху вниз или наоборот, что б подредактировать какую нить функцию не удобно.
а зачем ты пишешь все в одном файле?
для каждой сущности свой файл
оно и компиляция быстрей пойдет, компилировать будет не все а только измененные файлы
а насчет разбить ты в чем пишешь?
посмотри в меню "окно" у многих программ есть функция "разделить"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 01:13     Востановление состояния программы после завершения
Еще ссылки по теме:

C++ Ошибка после завершения программы. Двоичные файлы. Структуры
Ожидание завершения другой программы C++
C++ После выполнения (завершения) функции test переменная умрет, а что будет с переменной в Result?

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

Или воспользуйтесь поиском по форуму:
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
03.11.2013, 01:13  [ТС]     Востановление состояния программы после завершения #8
Цитата Сообщение от ValeryS Посмотреть сообщение
а зачем ты пишешь все в одном файле?
Один класс class Parser

Пишу в Visual studio 2010.

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

Добавлено через 3 минуты
Опа там можно целую кучу окон создавать, тока нашол, можно скоко хочешь окон одного файла создавать, вообще хорошо.
Yandex
Объявления
03.11.2013, 01:13     Востановление состояния программы после завершения
Ответ Создать тему
Опции темы

Текущее время: 16:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru