|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.05.2011, 20:21 | #11 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
это понятно. У меня многопоточное приложение создающее заранее не известное кол-во потоков. Семафор релизовывать в мотоде обращения к файлу а в тотоках вызывать этот метод? или как-то по другому?
|
09.05.2011, 23:07 | #12 |
Форумчанин
Регистрация: 11.03.2011
Сообщений: 426
|
Вставляете "как есть" в модуль. Из любого потока отправляете в процедуру/функцию записи в лог. Семафор стоит на страже, если один поток пишет, то второй будет ждать, пока откроется семафор. Как только семафор открыт - захват семафора, запись в файл, открытие семафора для следующего и выход из процедуры/функции.
|
09.05.2011, 23:16 | #13 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
т.е. согласно вашему коду я могу спокойно сделать вот так:
Код:
|
09.05.2011, 23:19 | #14 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
А семафор-то здесь зачем?
Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
10.05.2011, 01:14 | #15 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
|
|
10.05.2011, 01:27 | #16 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Можно.
Сердце должно качать кровь, а лёгкие - воздух. А не наоборот. И уж тем более не мешанина как в амёбе. Это - суть ООП, да и вообще любого структурирования. Обеспечение атомарности доступа в данном случае - задача лога. Вот он её и должен выполнять. А не кто-то там ещё, сбоку навешанный и костылями подпоротый. Пример с плагинами из соседней темы смотрел? Та же ошибка: работу с плагинами должен делать менеджер плагинов. А у тебя он (менеджер) только контейнером был, а работа с плагинами была размазана по программе. Если ты смотрел мой пример, то мог увидеть, что там всю работу с плагинами выполняет одна сущность, а вся остальная программа только её использует и отдаёт команды. Это и есть грамотное проектирование. Простейший вариант мог бы быть таким: Код:
Самое правильное - создать чистый объект. TStringList использовать внутри, как поле. А наружу выставить только Add, Clear и SaveToFile (ну и может ещё кого полезного). Я имею ввиду, что странно выглядит лог, у которого есть Delete и Exchange, а также возможность ассоциировать объекты со строками.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ведение лога изменений в базе | erzi | Microsoft Office Access | 6 | 02.02.2011 21:55 |
Ведения лога программы! | $T@LKER | Компоненты Delphi | 2 | 09.09.2010 15:36 |
Как лучше включать режим лога? | Alex Cones | Общие вопросы Delphi | 11 | 12.07.2010 00:07 |
Способы ведения файла-лога | Norfolk | Общие вопросы Delphi | 2 | 14.06.2007 20:47 |