Автор Тема: Работа с ini-файлами (вопрос скорее непосредственно к Johnny)  (Прочитано 524 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Hito

  • Герой форума
  • *****
  • Сообщений: 915
    • Просмотр профиля
Ребят, такая проблема у меня... Обрисую ситуацию. У меня есть скрипт на 2000 строк. В этом скрипте имеется около 100 обращений к одному и тому же ini-файлу. Скрипт конечно не все 100 обращений использует за 1 свой цикл - разные обращения в разных ситуациях, но думаю, что за 1 цикл раз 30 он все же к ini обращается. Этот цикл по времени равен 700-900 мс. Иными словами - скрипт обращается к ini раз 30 в секунду. Я запускаю 15 виртуальных машин и в каждой виртуалке запускается игра + кликер с этим скриптом. И того мы имеем уже около 450 обращений в секунду к этому ini. Все работает нормально. В ини есть несколько параметров, которые правятся в ручную, для управления кликерами. Я написал прогу для того, чтобы не копаться в этом ini-файле, для внесения изменений в эти параметры, но как только я запускаю эту прогу и начинаю пользоваться, в кликерах (которые в виртуалках) начинают периодически выскакивать ошибки интерпритации строк. Это как раз те строки, которые вносят свои данные в этот ini. Строки типа:
Код: Clickermann
  1. INIWRITE("variables.ini", "time", $_time_t, $imya)
Сначала я думал, что такие ошибки вылазят тогда, когда к ini идет несколько обращений одновременно, но потом, почесав репу, я подумал - а почему тогда кликеры без этой проги не выдают эти ошибки...? Ведь 15 кликеров очень не мало обращений делают к этому ini и наверняка тоже не раз эти обращения получаются одновременными. Тогда я подумал, что возможно в кликре и в моей проге (написанной на delphi) все же может быть какие-то разные форматы обращения к ini-файлам, или еще что-то вроде этого, и эта мысль мне кажется более подходящей... Отсюда и вопрос к Johnny - а как в кликере (ведь он тоже написан на delphi) прописаны обращения к ini? Вот, напирмер у меня в проге так:

uses
  IniFiles...

var
  variables: TIniFile;

procedure TForm1.Button1Click(Sender: TObject);
begin
  variables := TIniFile.Create(ExtractFilePath(Application.ExeName)+'variables.ini');
  variables.WriteString('Agr1.1','relog','1');
  variables.Free;
end;

Или в чем может быть причина...?
« Последнее редактирование: Февраль 09, 2019, 08:42:51 pm от Hito »
Я не ду... Потому и не бу...

ya12

  • Освоившийся
  • **
  • Сообщений: 95
    • Просмотр профиля
Если параметров в ini файле не слишком много, можно в место изменения файлов изменять названия каталогов.
А точно на Делфи написан? Вызов плагина в справке дан на Си.
« Последнее редактирование: Февраль 09, 2019, 10:33:30 pm от ya12 »

Hito

  • Герой форума
  • *****
  • Сообщений: 915
    • Просмотр профиля
Если параметров в ini файле не слишком много, можно в место изменения файлов изменять названия каталогов.
850 строк в ини
А точно на Делфи написан? Вызов плагина в справке дан на Си.

delphi

« Последнее редактирование: Февраль 09, 2019, 10:55:35 pm от Hito »
Я не ду... Потому и не бу...

ya12

  • Освоившийся
  • **
  • Сообщений: 95
    • Просмотр профиля
Каталог с 850 файлами открывается с небольшой задержкой. А в ram диске вообще без задержек.

Hito

  • Герой форума
  • *****
  • Сообщений: 915
    • Просмотр профиля
Каталог с 850 файлами открывается с небольшой задержкой. А в ram диске вообще без задержек.
У меня все без задержек происходит - дело не в этом. Прога с внесением данных в файл справляется за 1 мс. Файл на CCD находится. Я даже в три потока пробовал одновременно.
« Последнее редактирование: Февраль 10, 2019, 02:59:51 pm от Hito »
Я не ду... Потому и не бу...

ya12

  • Освоившийся
  • **
  • Сообщений: 95
    • Просмотр профиля
SSD отлично, осталось решить вопрос с блокировкой или обойти через каталоги (получение названия каталогов при записи не блокируется).

Hito

  • Герой форума
  • *****
  • Сообщений: 915
    • Просмотр профиля
SSD отлично, осталось решить вопрос с блокировкой или обойти через каталоги (получение названия каталогов при записи не блокируется).
Я не понимаю... Что за блокировка?
Я не ду... Потому и не бу...

Johnny

  • Создатель
  • Герой форума
  • *
  • Сообщений: 588
    • Просмотр профиля
Класс TIniFiles отличается и доробатывается от версии к версии. Никто же не расчитывал что в 2019 году кто то решит сделать из файла конфигурации базу данных реального времени. У вас собственно что за "delphi" то.
Это вполне обьясняет почему кликеры прекрасно уживаются но агрятся на чужеземца. Это конечно не точная причина но вероятная.
« Последнее редактирование: Февраль 20, 2019, 08:16:28 am от Johnny »

Hito

  • Герой форума
  • *****
  • Сообщений: 915
    • Просмотр профиля
Никто же не расчитывал что в 2019 году кто то решит сделать из файла конфигурации базу данных реального времени.
К сожалению, при работе с Clickermann (в виртуальных машинах), пока в этих целях доступно только ini... :)
У вас собственно что за "delphi" то.
Embarcadero RAD Studio 10.3 Rio Architect 26.0.32429.4364
Может посоветуете версию delphi, которая будет ближе к Clickermann-у...? :)
« Последнее редактирование: Февраль 21, 2019, 11:51:42 pm от Hito »
Я не ду... Потому и не бу...

Johnny

  • Создатель
  • Герой форума
  • *
  • Сообщений: 588
    • Просмотр профиля
ой не, она ну очень старая. это явно не выход. тем более я думаю перенести код на более новую версию. правда там всегда что то вылезает в этих случаях.

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

Hito

  • Герой форума
  • *****
  • Сообщений: 915
    • Просмотр профиля
может лучше предусмотреть механизм временного отключения кликеров на момент правки ini файла?
Это попа... Это все переменные на момент работы скрипта, нужно тогда вынести в файл, а потом снова "всосать" скриптом... Может тогда лучше обратить внимание на это сообщение...?
http://crapware.aidf.org/forum/index.php?topic=356.msg30551#msg30551
Я не ду... Потому и не бу...

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3610
  • Котэ
    • Просмотр профиля
Для твоего случая хорошо бы подошли функции чтения записи в реестр. Осталось их только создать.  :D

Hito

  • Герой форума
  • *****
  • Сообщений: 915
    • Просмотр профиля
Для твоего случая хорошо бы подошли функции чтения записи в реестр.
Сомневаюсь... У каждой виртуалки разве не свой реестр создается...?
ой не, она ну очень старая.
Охренеть... Мало того, что язык практически отмирающий, так еще и на древней delphi чел создал и поддерживает такой проект...
« Последнее редактирование: Февраль 27, 2019, 09:10:29 am от Hito »
Я не ду... Потому и не бу...