Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Windows

На какой версии Windows вы сейчас сидите и почему? : Windows

22.11.2024 19:05


22.02.2023 16:52
Цитата:
OlegON как раз в этом случае винда обязана прибить всякий мусор, который по каким-то непонятным причинам не закрывается и выключиться, успеть сбросить все кеши и прочее, чтобы не развалилась файловая система...

Я не понимаю, зачем ждать последних секунд, если данные настолько важные? Пусть в параллельном потоке они постоянно инкрементально или целиком сохраняются, а если приложение прибилось по какому-то поводу, то в следующий запуск спросить, надо ли восстановить их, если не надо, то пусть парочка последних таких копий валяется на всякий случай... Если система получила сигнал на выключение, она должна выключиться и немедленно, приоритет каких-то там окошек минимальный, если хотите серьезнее - регистрируйте приложение сервисом, они тоже могут показывать окошки.
Если мне нужно в середину файла вставить новые записи, я должен:
1.открыть файл.
2.Раздвинуть (очень большой по размеру) файл, считав его хвост в память, затем записав его хвост со смещением
3.в образовавшуюся дырку записать новую запись.
4.закрыть файл.

а если мне нужно 500 записей подряд записать, я , открыв файл, не буду спешить его закрывать, пока не сформирую все 500 новых записей и не запишу их. На это мне потребуется какое-то время, возможно, 5 секунд. Если закрыть раздвинутый файл не записав в его середину запись, в середине файла будет мусор. Нужно обязательно по получению сигнала от винды на завершение работы либо быстро дозаписать запись в раздвинутый файл, либо
(если данные не готовы) сдвинуть файл назад, убрав эту дырку. Чтобы сдвинуть назад большой файл могут потребоваться те же условные 5 секунд.

Винда направила мне сигнал на завершение и ОБЯЗАНА дать мне время успеть корректно закрыть мои открытые файлы так, чтобы я успел во все пустые дырки в раздвинутые файлы записать верные данные чтобы там не оказалось мусора и база данных не была испорченной. Не давая ни секунды времени на это, винда не позволяет мне сохранить базу данных не испорченной. Но ведь ВИН ХР дает такое время, ждет. Почему ВИН7 этого не делает? ДА ПОТОМУ ЧТО ЭТО ОШИБКА В АЛГОРИТМАХ ВИНДЫ 7.
22.02.2023 16:56
Цитата:
student А как быть тем кто бесперебойник видел только на картинке? Или рядом была злобная уборщица со шваброй?
Кто и кому будет сигнал подавать? Рассчитывать на "тепличные" весьма серьёзное заблуждение...
Если это домашний компьютер, ничего страшного - перезагрузим, и заново запустим игру.

Но если это учетный сервер в супермаркете - мы же не можем перезагрузить базу на начало дня, потеряв все продажи. Более того, нужно дать возможность дообслужить покупателя уже после вырубания электричества. И затем сохранить в базе данных продажу. Работа без бесперебойника - это не тема данного форума по автоматизации бизнес- процессов.
22.02.2023 17:01
Цитата:
student А попробовать на обычном батнике с циклом религия не позволяет ? Или это не консоль? А то получается как с неправильными пчелами который делают неправильный мед
Какой к чертям батник когда винда7 прибивает все консольные приложения моментально хоть из батника, хоть без батника запущенные.
Я вам указал на ошибки в винде, а вы пытаетесь всеми способами защитить майкрософт. Зачем? Это констатация факта и показательный пример чем ХР лучше чем вин7.
22.02.2023 17:04
Вчера на Радио Маяк я провел эфир по психологическим манипуляциям и обману. Все эти обновления безопасности с моей точки зрения обманки чтобы под этой личиной похитить данные с компа, прослушать, завладеть вами, заставить платить. Мое мнение что обновление без запроса от пользователя (когда его все и так устраивает) - это зло.
22.02.2023 17:28
Цитата:
amadey Я вам указал на ошибки в винде, а вы пытаетесь всеми способами защитить майкрософт
ничего подобного - в винде много чего не нравится, но это не означает что все свои недоработки я должен оправдывать "корявостью" винды :)

судя по описанию такое
Цитата:
amadey Если мне нужно в середину файла вставить новые записи, я должен:
1.открыть файл.
2.Раздвинуть (очень большой по размеру) файл, считав его хвост в память, затем записав его хвост со смещением
3.в образовавшуюся дырку записать новую запись.
4.закрыть файл.
характерно для тхт файлов и не понятно как это стыкуется с
Цитата:
amadey по автоматизации бизнес- процессов.
мне просто сложно представить бизнес процесс на тхт файле :)
Цитата:
amadey Работа без бесперебойника - это не тема данного форума
да, это не тема форума это суровая реальность для многих
22.02.2023 17:49
Цитата:
amadey прибивает все консольные приложения моментально
читаем мсдн
==========
Чтобы получать события, когда пользователь выходит из системы или устройство завершает работу в таких условиях, создайте скрытое окно в консольном приложении, а затем обеспечьте обработку сообщений окна WM_QUERYENDSESSION и WM_ENDSESSION, которые получает скрытое окно. Вы можете создать скрытое окно, вызвав метод CreateWindowEx с параметром dwExStyle, для которого задано значение 0
==========
можно еще проще - назначить RtlSetProcessIsCritical или через SetConsoleCtrlHandler - замучаетесь винду выключать пока процесс жив
т.е. кто хочет - сделает, кто не хочет - найдет причину
22.02.2023 18:08
Что-то мы от обсуждения винды ушли в сторону неумения работать с консольными приложениями и алгоритмически неверного решения хранить завершенные транзакции в памяти, а не на диске...
22.02.2023 18:26
Цитата:
OlegON Что-то мы от обсуждения винды ушли в сторону
так одно порождает другое, в том числе и обвинение винды в том что она ведет себя не так как кому то хочется :)
22.02.2023 21:48
Цитата:
student характерно для тхт файлов и не понятно как это стыкуется с

мне просто сложно представить бизнес процесс на тхт файле :)
Технические алгоритмы низкого уровня в конечном итоге сводятся именно к такому алгоритму работы с файлами баз данных. ВСЕГДА.
Если приложению не дать закончить свой алгоритм, порча будет гарантированно.
22.02.2023 22:03
Цитата:
student читаем мсдн
==========
Чтобы получать события, когда пользователь выходит из системы или устройство завершает работу в таких условиях, создайте скрытое окно в консольном приложении, а затем обеспечьте обработку сообщений окна WM_QUERYENDSESSION и WM_ENDSESSION, которые получает скрытое окно. Вы можете создать скрытое окно, вызвав метод CreateWindowEx с параметром dwExStyle, для которого задано значение 0
==========
можно еще проще - назначить RtlSetProcessIsCritical или через SetConsoleCtrlHandler - замучаетесь винду выключать пока процесс жив
т.е. кто хочет - сделает, кто не хочет - найдет причину
1.Подключение графики к консольному приложению ДИКО увеличивает размер приложения. Всё. что в последнее время разработано, имеет размер диких ГИГОВ , а делает почти ничего при этом. Мое приложение не такое. Оно 1,6 Мб. МЕГАбайта размером, а функционал в нем больше чем в 1с. Послушав ваш совет, оно будет 1,6 ГИГАбайта и потребует крутых современных компов/серверов за 100500 денег. Ну как 1с v8 безбожно тормозит на простом компе за 18000р. Мое приложение не будет использовать то, что совершенно не нужно.

2.Я так и делаю:

g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
SetConsoleCtrlHandler(HandlerRoutine, TRUE);

Не работает представьте себе в вин7. А в вин ХР - работает.

3.Почему я должен придумывать заплатку работающую через ж@пу. Есть же уже правильный механизм. Почему его идеально работающий сделали неисправным в вин7?
Часовой пояс GMT +3, время: 19:05.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.