Доступ к файлам - страница 4

 
tara:

Все-таки, решился(рэп):
Структура програмы бывает разная,
простая, оверлейная и динамическая...
Но это - всего лишь схема использования памяти,
Не более того...

Оверлейная?!
с какого это у вас, батенька, года сведения?
это ж ещё дос
 
ОС ЕС. Могу нарезать.
 
tara:
ОС ЕС. Могу нарезать.
Да вы, батенька, динозавр :-)
 
От динозавра слышу
 
Zhunko:

Кода нет. Придумывать надо. Но беспокоиться на счёт "миллисикуда в миллисекунду" не стоит. На уровне ядра система сама это разрулит и выстроит в очередь.

Правда, в таком случае никто никак не регламентирует кто будет первым и кто - последним.


Тогда, вероятно, я не понял о каком ядре идёт речь? Ядро операционки, ядро терминала MT4, или мож какое-то другое ядро? И какое отношение имеет к работе с ядром функция GlobalVariableSetOnCondition()?
 
drknn:

Тогда, вероятно, я не понял о каком ядре идёт речь? Ядро операционки, ядро терминала MT4, или мож какое-то другое ядро? И какое отношение имеет к работе с ядром функция GlobalVariableSetOnCondition()?
Код есть в примере к функции GlobalVariableSetOnCondition(). Там написано в описании, что реализует атомарный доступ. Какая разница на уровне какого ядра она это делает? Главное, что она это делает.
 
Zhunko:
Код есть в примере к функции GlobalVariableSetOnCondition(). Там написано в описании, что реализует атомарный доступ. Какая разница на уровне какого ядра она это делает? Главное, что она это делает.


Мой код обеспечивает точно такой же дступ к переменной глобального уровня. Не знал, что он называется атомарным. И раз зуж мы коснулись вопроса справки по этой функии, то у меня просьба к разработчикам. Там явная опечатка в примере кода.

Строку

GlobalVariableSet("file_semaphore",0);

следует заменить на

GlobalVariableSet("DATAFILE_SEM",0);

Разработчики, исправьте пожулуйста. Это тут: https://docs.mql4.com/ru/globals/GlobalVariableSetOnCondition Последняя строка перед последней закрывающей фигурной скобкой.

 
drknn:


Мой код обеспечивает точно такой же дступ к переменной глобального уровня. Не знал, что он называется атомарным.

Тот код не обеспечивает атомарный доступ.
 

А так не проще будет? Так точно не будет ошибки чтения файла.

   //запись в TXT файл
   int handle=Traffic("txt",filename);
   if(handle!=0){
        FileSeek(handle,0,SEEK_END);
        FileWrite(handle,text);
        FileClose(handle);
        }

//+------------------------------------------------------------------+
//| проверка очереди                                                 |
//+------------------------------------------------------------------+  
int Traffic(string type, string name){
   int second=0;
   if(type=="txt"){
      while(true){
         ResetLastError();
         int handle=FileOpen(name,FILE_TXT|FILE_READ|FILE_WRITE);
         if(handle!=INVALID_HANDLE)return(handle);
         else{
            Sleep(1000);                           //ждём 1 секунду
            second++;
            if(second>=120){                       //превышен лимит ожидания в 2 минуты
               Alert("Превышен лимит ожидания");
               break;
               }
            }
         }
      }
   return(0);
   } 
Причина обращения: