Author Topic: Работа с ini-файлами (вопрос скорее непосредственно к Johnny)  (Read 5730 times)

0 Members and 1 Guest are viewing this topic.

Hito

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

Code: [Select]
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;

Или в чем может быть причина...?
« Last Edit: February 09, 2019, 08:42:51 PM by Hito »
Я не ду... Потому и не бу...

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Если параметров в ini файле не слишком много, можно в место изменения файлов изменять названия каталогов.
А точно на Делфи написан? Вызов плагина в справке дан на Си.
« Last Edit: February 09, 2019, 10:33:30 PM by ya12 »

Hito

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

delphi

« Last Edit: February 09, 2019, 10:55:35 PM by Hito »
Я не ду... Потому и не бу...

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Каталог с 850 файлами открывается с небольшой задержкой. А в ram диске вообще без задержек.

Hito

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

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
SSD отлично, осталось решить вопрос с блокировкой или обойти через каталоги (получение названия каталогов при записи не блокируется).

Hito

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

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Класс TIniFiles отличается и доробатывается от версии к версии. Никто же не расчитывал что в 2019 году кто то решит сделать из файла конфигурации базу данных реального времени. У вас собственно что за "delphi" то.
Это вполне обьясняет почему кликеры прекрасно уживаются но агрятся на чужеземца. Это конечно не точная причина но вероятная.
« Last Edit: February 20, 2019, 08:16:28 AM by Johnny »

Hito

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

Johnny

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

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

Hito

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

Oraven

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

Hito

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