Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364

Самопальный стек для пользователей.

29.01.2012, 00:01. Показов 832. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день или вечер)
Дело состоит в очень муторном куске кода, воистину странным.
В проекте цель этого стека записать ID пользователя(регистрационный) и его идентификатор сокета.
Цель: Пересылка между пользователями данных.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//Стек данных
   int Cheb21::Stack(AnsiString cmd,int id,int indif)
{
int temp;//Переменная под значения цикла
Cheb21 ch21;
if(cmd=="add")
{
for(int i=0;ch21.Ids[i]!=0||i>400;i++){temp=i;}
ch21.Ids[temp]=id;
ch21.Indif[temp]=indif;
}
if(cmd=="inf")
{
if(indif==0&&id!=0)
{//Находим идентификатор сокета по иду пользователя
for(int i=0;ch21.Ids[i]!=0;i++)
{
if(id==ch21.Ids[i])
{
return ch21.Indif[i];
}}}//конец цикла
 
}//Находим идентификатор по иду пользователя
if(id==0&&indif!=0)
{//Находим ID пользователя по идентификатору сокета
for(int i=0;ch21.Indif[i]!=0;i++)
{
if(indif==ch21.Indif[i])
{
return ch21.Ids[i];
}
}//Находим ID пользователя по идентификатору сокета
if(id==0&&indif==0)
{return 0;}//сообщаем об ошибке.
}
if(cmd=="del")
{
for(int i=0;ch21.Ids[i]!=0;i++)
{
if(ch21.Indif[i]==indif){ch21.Ids[i]=0; ch21.Indif[i]=0;}}
}
 
if(cmd=="ret")
{}
return 1;
}
Сам самопальный стек.
C++
1
2
3
4
5
6
7
8
9
10
ch21.Stack("add",StrToInt(ID),Socket->SocketHandle);
//***********************************************
tempp=ch21.Stack("inf",StrToInt(temp),0);
if(tempp!=0&&tempp!=1)
{
ServerSocket1->Socket->Connections[tempp]->SendText(buff);
}
else{Socket->SendText(buff.SubString(1,buff.Pos(":"))+"offline");}
//End Cycle
}
Где и как он используется.

Прощупывал их ShowMessages'ами все данные корректны, но вот при пробе переслать сообщение, двум якобы активным клиентам, выдает сообщение offline (это сообщение выводится, если пользователя нет в стеке данных)

Добавлено через 3 минуты
ps Тут замечена несущественная ошибка, доступ к переменным объявленным внутри класса Cheb21 можно использовать без Указателя на этот класс. это исправим.

Добавлено через 1 час 56 минут
Народ проект тухнет задержка именно по этому случаю идет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2012, 00:01
Ответы с готовыми решениями:

Описать и реализовать класс Стек, моделирующий массивом стек, для хранения любых объектов
ПОЖАЛУЙСТА ПОМОГИТЕ РАЗОБРАТЬСЯ С ЗАДАЧЕЙ НА JAVA!!! только начинаю изучать этот язык. буду очень признательна за пояснение каждой...

Самопальный optional, темплейты, попытка в реализацию fmap для optional
Вкратце, есть у меня мой собственный optional. То, что это optional, не суть важно, дело не в нем, все упоминания о нем можно спокойно...

Joomla 3 - индивидуальные файлы Excel для пользователей и групп пользователей
Доброго времени суток! Подскажите, пожалуйста, как реализовать следующую задачу. Когда пользователь входит на сайт под своей учетной...

2
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
29.01.2012, 12:06
мне кажется неправильно добавляет:
C++
1
for(int i=0;ch21.Ids[i]!=0||i>400;i++){temp=i;}
1 для чего здесь условие "больше 400"?
2 когда цикл найдет первый ненулевой (свободный) элемент вектора и закончится по условию в переменной темп будет предыдущий индекс вектора (тот который все еще занят).
по моему нужно так
C++
1
2
3
4
5
6
7
8
for(int i=0;i<sizeof_idx;i++)
{
    if (!ids[i])
    {
        temp = i;
        break;
    }
}
1
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
29.01.2012, 12:23  [ТС]
Надо было условие конечно меньше сделать(i<400) ибо цикл может вылезти за пределы, а там Access Viloation - что сегодня так и грызли программу.
Мне кажется, что SocketHandle не дает идентификатор сокета, где то примеры на Delphi видел, но как проверял там коды за 1700 выходят а того и более.

Добавлено через 7 минут
Все заметил в чем косяк. действительно, в этом выражении
C++
1
for(int i=0;ch21.Ids[i]!=0||i>400;i++){temp=i;}
нужно было сделать так
C++
1
for(int i=0;ch21.Ids[i]!=0||i<400;i++){temp=i;}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2012, 12:23
Помогаю со студенческими работами здесь

Дополнительный самопальный БП
Здравствуйте. Есть подозрение что видеокарте не хватает питания. БП БП AOpen Z350-08F 350 PEAK Видео 9800GT с доп. питанием. Интересует...

Самопальный ПЛК
Всем доброго времени суток! Собственно сабж. Я сам новичок в этих делах, так что прошу сильно-больно не пинать. Маленькая предыстория: На...

ScrollBar самопальный
Привет я делаю scrollbar. Проблема вот в чем, когда двигаешь ползуноком и смещаешь мышку на текст, при следующей попытке ползунок не...

Самопальный ListView
Хочу создать свой класс, потомок ListView. Как мне при этом заменить коллекцию членов моего ListView на созданный мной класс, потомок...

Самопальный хостинг-провайдер
Доброе время суток! Меняю имя компьютера на vit222progersdev и его видно в сети как веб-сервер, если туда поставить nginx. Можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru