« Предыдущий пост | На главную страницу | Следующий пост »

Глобальные массивы: функция Count()

В прошлом выпуске я расскал о структуре хранения данных в глобальном массиве. Теперь мы знаем достаточно, чтобы начать реализовывать функции для работы с массивом:

  • AddItem()
  • DeleteItem()
  • GetItem()
  • Count()
  • Search()
  • BSearch
  • Sort()

В каждой из вышеперечисленых функций будем использовать "критические секции". Перед каждым обращением к данным мы будем "локировать" критическую секцию с помощью вызова функции Lock(). По окончании работы с массивом "разлочим" критическую секцию с помощью функции Unlock().

Сами критические секции и функции для работы с ними подробно рассмотрены в выпуске "Критическая секция": разграничение доступа к ресурсу".

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

//+--------------------------------------------------------------------------------------------------+
//| Функция Count()                                                                          |
//|                                                                                                  |
//| Возвращает количество элементов массива или -1 в случае ошибки |
//+--------------------------------------------------------------------------------------------------+
int Count(string array)
  { 
    // Залокируем критическую секцию
    string critical_section = array+"Lock";
    if (Lock(critical_section)!=0) return(-1);
// Количество элементов массива хранится в переменной с именем, // равным имя массива + "Count" string gv; gv = array+"Count";
int err;
// Если глобальная переменная не существует, то элементов нет, // поэтому вернем 0 if (!GlobalVariableCheck(gv)) { err = GetLastError(); if (err!=0) { // Разлокировать критическую секцию Unlock(critical_section);
// Вывести сообщение об ошибке и выйти Print("Count()->GlobalVariableCheck(): ошибка ", err); return(-1); } else { // Разлокировать критическую секцию Unlock(critical_section);
// Выйти return(0); } }
// Глобальная переменная существует, поэтому вернем ее значение int result; result = GlobalVariableGet(gv);
err = GetLastError(); if (err!=0) { // Разлокировать критическую секцию Unlock(critical_section);
// Вывести сообщение об ошибке и выйти Print("Count()->GlobalVariableGet(): ошибка ", err); return(-1); }
// Разлокировать критическую секцию Unlock(critical_section);
// Выйти return(result); }

Код этой функции крайне понятен и достаточно подробно откомментирован, поэтому я не вижу причин его разбирать более подробно. Но если у Вас появятся какие-то вопросы, то я с удовольствием на них отвечу.

В следующем выпуске я расскажу о функции AddItem().



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Подписаться на мою рассылку



Размещение статьи "Глобальные массивы: функция Count()" на Вашем сайте

Размещение статьи "Глобальные массивы: функция Count()" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "Глобальные массивы: функция Count()" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 5.04