Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2016, 17:14   #1
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию работа с сокетами и listview

Добрый день, заметил такой момент..
(сокеты, stNonBlocking)

Есть процедура, которая ведет историю подключений.
Перед добавлением новой строки, выполняется проверка, добавлялась ли ранее токая строка,
если да - информация о времени последнего подключения обновляется
Если нет - создатся новая строка
Код:
Procedure DetaliseCenterAddConnect(hash,days:String);
var
i:integer;
license_str:String;
add_new_cu:boolean;
begin
 add_new_cu:=true;

  if days<>'0' then
    license_str:='LICENSE' else
    license_str:= 'FREE';

  for I := 0 to mainform.LogTestCenter.Items.Count-1 do
    if mainform.LogTestCenter.Items.Item[i].SubItems.Strings[1]=hash then
    begin
       mainform.LogTestCenter.Items.Item[i].Caption:= Datetimetostr(now);
       mainform.LogTestCenter.Items.Item[i].SubItems.Strings[0]:= license_str ;
       add_new_cu:=false;
       break;
    end;

  if add_new_cu then
    with mainform.LogTestCenter.Items.Add do
 begin
    caption:=  Datetimetostr(now);  // дата + время
    subitems.Add (license_str);
    subitems.Add (hash);
  end;

 SaveHystoryToIni; //сохраняю лист
 mainform.TabSheet4.Caption:='ИСТОРИЯ ПОДКЛЮЧЕНИЙ ('+inttostr(mainform.LogTestCenter.Items.Count)+')';
end;
на выходе имеем


то есть по идее, идентификаторы (hash) не должны повторятся в listview
Но на деле иногда появляются по две и более записей с одинаковым идентификатором.
Процедура DetaliseCenterAddConnect вызывается из события OnClientRead

У кого нибудь есть идеи?
aesoem вне форума Ответить с цитированием
Старый 18.11.2016, 17:21   #2
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
У кого нибудь есть идеи?
https://www.youtube.com/watch?v=VCvoO1hRc54
come-on вне форума Ответить с цитированием
Старый 18.11.2016, 18:50   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,873
По умолчанию

Цитата:
Если нет - создатся новая строка
Нет. В вашем коде новая строка создается всегда независимо ни от каких условий.
northener вне форума Ответить с цитированием
Старый 18.11.2016, 19:03   #4
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Нет. В вашем коде новая строка создается всегда независимо ни от каких условий.
да ладно)
Код:
  for I := 0 to mainform.LogTestCenter.Items.Count-1 do
    if mainform.LogTestCenter.Items.Item[i].SubItems.Strings[1]=hash then
begin
 add_new_cu:=false;
break;
end;
если условие выполнится цикл остановится,add_new_cu присвоится лож, и код далее
Код:
  if add_new_cu then
    with mainform.LogTestCenter.Items.Add do
 begin
    caption:=  Datetimetostr(now);  // дата + время
    subitems.Add (license_str);
    subitems.Add (hash);
  end;
не выполнится(цикл with - do не запускается)...

Но суть не в этом, данный код работает как часы... Тут загвоздка в другом...
щас пытаюсь синхронизацию потоков прикрутить...

Последний раз редактировалось aesoem; 18.11.2016 в 19:15.
aesoem вне форума Ответить с цитированием
Старый 18.11.2016, 19:04   #5
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
благодарю, очень познавательно...
aesoem вне форума Ответить с цитированием
Старый 18.11.2016, 19:22   #6
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

ну а что еще с таким "кодом" делать? в печке ему самое место
come-on вне форума Ответить с цитированием
Старый 18.11.2016, 21:32   #7
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
ну а что еще с таким "кодом" делать? в печке ему самое место
так в чем проблема? Давай, покажи как надо. Спец же емае, куда мне там со своим гавнокодом. Научи о великий гуру... Видеоролики с ютуба вставлять у меня и теща умеет.

Последний раз редактировалось aesoem; 18.11.2016 в 21:37.
aesoem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++, работа с сокетами Winster322 Visual C++ 1 19.08.2014 08:58
Работа с сокетами Thief_Brother Работа с сетью в Delphi 25 27.02.2012 11:04
Работа с сокетами zumm Работа с сетью в Delphi 10 28.03.2010 15:30
**Работа с сокетами** Яр|/||< (^_^) Работа с сетью в Delphi 4 11.07.2009 18:10
Работа с сокетами vasilii_terkin Работа с сетью в Delphi 2 13.02.2007 11:08