Показать сообщение отдельно
Старый 04.07.2012, 12:00   #7
AlexSE
Новичок
 
Регистрация: Jun 2012
Сообщения: 20
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Срочно! Помогите! О разделяемой памяти!

Кто может объяснить мне:

Есть функция float getFloat(const char * name, float val), она
вызывает get() с определенным набором параметров, а get() натравливает
IsFound() на поиск имени переменной в map , которая собирается с
ини-файла.
Собирается все отлично, переменные, их тип и адреса видны в файлике
load_files.srv. НО!

Когда мы начинаем брать значения этих переменных (хоть по имени, хоть
по номеру из этого файла) - нам возвращают -1 в первом случае и NULL
во втором.

Тут и начинается самое интересное:

- В смлоджик имена менял (на всякий) - ноль эмоций
- Контроллер рестартил
- Наткнулся на кучу ерроров нетбинс (IDE на убунте), которая не может
распарсить итераторы у мапа (хотя на это можно положить)
- Обнаружил очень интересную фичу: раньше итемы в листе собирали с
чарами, а теперь решили собрать со стрингом. На всякий, оставив
комментами старые методы. Если честно, возвращать обратно чары не вижу
смысла (см. про NULL в ответ на запрос по номеру переменной), но
интересен сам факт - видимо с именами проблемы уже были.

#include "shm.hpp"

int main()
{
Shm mymem("./load_files.srv"); //Инициализация переменных разделяемой памяти
//FILE *file;

struct timespec tv;//Структура для задания временных интервалов
tv.tv_sec = 0;
tv.tv_nsec = 100000000; //(наносекунд) задержка в 1 сек
// хотя лучше сделать столько-же, сколько период обновления на веб-морде (!)


if (( mymem.getType("mem_tech") == FLOAT ) && \
( mymem.getType("mem_in") == FLOAT ) && \
( mymem.getType("mem_out") == FLOAT ) && \
( mymem.getType("mem_room") == FLOAT ))
for (int i=0;i<50;i++) // Бесконечный цикл
{
/*if ((file = fopen("result.txt","w")) == NULL)
{
printf("Can't open file\n");
exit(-1);
} else {
fprintf (file, "<?xml version=\"1.0\" encoding=\"cp1251\">");
fprintf (file, "<result>");
fprintf (file, "<bases>");*/

nanosleep(&tv, NULL); //выполняем задержку для экономии ресурсов

//================================================== ==================//
// mem_tech - температура наружняя //
//================================================== ==================//
float mem_tech = mymem.getFloat(6);
//fprintf(file,"<base>mem_tech = %f</base>",mem_tech);
printf("<base>mem_tech = %3.6f</base>\n",mem_tech);

//================================================== ==================//
// mem_in - температура канала //
//================================================== ==================//
float mem_in = mymem.getFloat(7);
//fprintf(file,"<base>mem_in = %f</base>",mem_in);
printf("<base>mem_in = %f</base>\n",mem_in);

//================================================== ==================//
// mem_out - температура обр_воды //
//================================================== ==================//
float mem_out = mymem.getFloat(8);
//fprintf(file,"<base>mem_out = %f</base>",mem_out);
printf("<base>mem_out = %f</base>\n",mem_out);

//================================================== ==================//
// mem_room - температура помещения //
//================================================== ==================//
float mem_room = mymem.getFloat(9);
//fprintf(file,"<base>mem_room = %f</base>",mem_room);
printf("<base>mem_room = %f</base>\n",mem_room);

/*fprintf (file, "</bases>");
fprintf (file, "</result>");
fclose(file);
}*/

printf("=====\n");
} else {
//fprintf(file,"<base>ERROR: mem_tech has type %d</base>",mymem.getType("mem_tech"));
printf("ERROR: mem_tech has type %d\n",mymem.getType("mem_tech"));
//fprintf(file,"<base>ERROR: mem_in has type %d</base>",mymem.getType("mem_in"));
printf("ERROR: mem_in has type %d\n",mymem.getType("mem_in"));
//fprintf(file,"<base>ERROR: mem_out has type %d</base>",mymem.getType("mem_out"));
printf("ERROR: mem_out has type %d\n",mymem.getType("mem_out"));
//fprintf(file,"<base>ERROR: mem_room has type %d</base>",mymem.getType("mem_room"));
printf("ERROR: mem_room has type %d\n",mymem.getType("mem_room"));
exit(-1);
}
printf("DONE\n");
}


Собственно вопрос: в каком случае вашими нативными методами
нельзя взять перменные? (хотелось бы МАКСИМАЛЬНО подробно)
AlexSE вне форума   Ответить с цитированием