powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / закрыть STL поток на время, пока он не активен.
15 сообщений из 15, страница 1 из 1
закрыть STL поток на время, пока он не активен.
    #32320557
ProgramMaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
моя программка работает как сервис. она ведет свой лог. в программе это выглядит примерно так.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 ofstream os;
  if(argc> 3 )
  { 
    char path[_MAX_PATH +  1 ];    strncpy(path,argv[ 3 ], _MAX_PATH);   path[_MAX_PATH] = '\0';
    os.open(path, ios::app | ios::out);
    if(os.good()) // Ok
    {      cout = os;
    } else { ... }

// дальше все сообщения об ошибках пишутся на cout.


к несчастью, мне иногда нужно снести лог, когда программка работает (а она работает 24x7, и останавливать ее не желательно.) но Windows не позволяет удалить лог, т.к. он всегда открыт.

можно ли в открывать файл только на то время, когда в него идет запись?
(например, закрывать при каждом flush, а потом снова открывать)

как это сделать с минимальными изменениями в программе?
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321086
Cactus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
STL с потоками не дружит. Все делать надо ручками.

Посмотри справку на
CreateFile

может тебе повезёт и с
FILE_SHARE_DELETE

в третьем параметре - получишь нужный результат.
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321114
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Cactus

STL с потоками не дружит. Все делать надо ручками.

Силное заявление - модежет еще и аргументы найдутся


2ProgramMaker

Ну так бери и закрывай - а затем, когда нужно, снова отрывай - в чем проблема?
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321214
ProgramMaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Cactus
да, с CreateFile результат получился нужный, спасибо.
а нельзя ли теперь сделать магические махинации?
handle преобразовать в дескриптор файла, а затем в поток?

2 funikovyuri
проблема в том, что программа уже написана о отлажена. не очень хочется вносить исправления. как раз "когда нужно" означает "в разных местах программы".
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321348
Cactus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To funikovyuri

"Эффективное использование STL"
Скотт Мейерс
ISBN 5-94723-382-7

Совет 12
"Разумно оценивайте потоковую безопасность контейнеров STL"

стр. 64
"...в решегии проблем многопоточности не стоит полагаться на реализацию STL. Вместо этого в потобных случаях следует самостоятельно синхронизовать доступ."
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321380
Cactus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To ProgramMaker

Не понимаю цели магии.
И страшно подстрекать к такому колдовству.

Посмотри справку на

_open_osfhandle
_fileno
_get_osfhandle

но я не уверен, что поможет.
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321420
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Cactus

Скотт Мейерс это конечно авторитет - только ты по ходу дела thread с stream попутал
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321460
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Совет 12
>"Разумно оценивайте потоковую безопасность контейнеров STL"
>стр. 64
>"...в решегии проблем многопоточности не стоит полагаться на реализацию >STL. Вместо этого в потобных случаях следует самостоятельно >синхронизовать доступ."

Полностью согласен. В стандартном STL ( в других не знаю ) при доступе к map, vector и другим объектам используется ОДНА критическая секция. Не знаю чем руководствовались разработчики, но в итоге если не "самостоятельно >синхронизовать доступ" можно получить различный геммор, в виде deadlock'ов.
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321476
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tracer - ты топик вообще читал - какая потоковая безопасность - где тут многопоточность? Ну че лезть не врубившись?
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321481
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к слову - руководствовались они эффективностью

Потом - что такое стандартная STL? Это от HP что-ли?
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321482
Cactus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To funikovyuri


А разве

std::ofstream

не контейнер?

Вопрос ProgramMaker можно понять, так

Как с std::ofstream работать в разных threads или процессах?

Согласен в том, что при переводе на русский терминов "thread" и "stream" может возникнуть путаница.
Но фраза "STL не дружит с std::ofstream" глупа сама по себе и подразумевалось, что из контекста понятно о чём идет речь.
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321500
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Cactus

Вопрос ProgramMaker можно понять, так

Как с std::ofstream работать в разных threads или процессах?

закрыть STL поток на время, пока он не активен.

Ну если ты его так понял - тогда без проблем - только если не сложно поясни мне - где ты у него про threads прочитал?
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321503
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, к стати, лютель Мейерса

std::ofstream - это поток (stream) - а не контейнер
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321527
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Tracer - ты топик вообще читал - какая потоковая безопасность - где тут многопоточность? Ну че лезть не врубившись?

Вообще то я отвечал на конкретное сообщение.

>к слову - руководствовались они эффективностью
И в чем же она проявляется ? Если все равно приходится заводить дополнительные критические секции ?

>Потом - что такое стандартная STL? Это от HP что-ли?
да
...
Рейтинг: 0 / 0
закрыть STL поток на время, пока он не активен.
    #32321562
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Tracer

И в чем же она проявляется ? Если все равно приходится заводить дополнительные критические секции ?

Не ну вы тут все грамотные Мейерса читали - у него как раз про это тоже много чего написано
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / закрыть STL поток на время, пока он не активен.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]