powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TIdTCPServer.OnExecute & TQueue
14 сообщений из 39, страница 2 из 2
TIdTCPServer.OnExecute & TQueue
    #40110503
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

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

PS: Хотя на мой вкус проще выкинуть всю эту индюшатину в полном составе.


Ушел от инди где мог, по сокетам ничего не нашел... :(

Как можно и в этом вопросе избавиться?
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110508
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

ъъъъъPostMessage(Self.Handle, WM_STRPROCESS, WPARAM(Pointer(fStr)), 0);

С PostMessage так нельзя: до главного потока долетит ссылка на мусор от которого
тому поплохеет. С SendMessage - можно.


Сделал ч-з SendMessage, работает отлично, но инди ещё преподнесли геморроя... При отключении сервера с подключенными клиентами , выходит ошибка raised exception class EIdClosedSocket with message 'Disconnected.'. и способа корректно "отрубить" всех клиентов я не нашёл... Какая-то муйня
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110568
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox
Ушел от инди где мог, по сокетам ничего не нашел... :(

Прям стало интересно, где же ты все-таки ушел от Инди, если это либа сетевых компонентов
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110578
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По коду от ъъъъъ: вариант костыльно-хакерский, конечно, его надо обкладывать комментами и проверками. Либо сделать более корректно через NewStr/DisposeStr. И указатели традиционно отсылаются в LPARAM (хоть с w32 они и сравнялись в размерах с WPARAM). И еще я бы добавил $IF проверку по Sizeof - она есть не просит, зато сразу ругнется, если вдруг код окажется на платформе, где размеры не совпадают
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110611
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
И еще я бы добавил $IF проверку по Sizeof - она есть не просит, зато сразу ругнется, если вдруг код окажется на платформе, где размеры не совпадают
Сомневаюсь, что когда-нибудь появится новая винда, в которой будет sizeof(LPARAM) <> sizeof(LPARAM) или <> sizeof(Pointer).

А вот хакерство мне да, сильно не нравится.
Кстати, там будет утечка памяти, всего лишь если PostMessage вернёт False. Надо хотя бы на результат проверять перед этим хаком (который, кстати, в следующих версиях дельфей вполне может перестать работать, в отличие от изменения параметров PostMessage).
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110613
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox
Dimitry Sibiryakov

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

PS: Хотя на мой вкус проще выкинуть всю эту индюшатину в полном составе.


Ушел от инди где мог, по сокетам ничего не нашел... :(

Как можно и в этом вопросе избавиться?

А книжку кто-то раньше тебя скачал, теперь там её нет?
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110618
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox

... При отключении сервера с подключенными клиентами , выходит ошибка raised exception class EIdClosedSocket with message 'Disconnected.'. и способа корректно "отрубить" всех клиентов я не нашёл... Какая-то муйня

Код: pascal
1.
IdTCPServer.Bindings.Clear;

- при этом для каждого соединения вызовется CloseSocket, т.к.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
destructor TIdSocketHandle.Destroy;
begin
  CloseSocket;
  FreeAndNil(FConnectionHandle);
  FreeAndNil(FReadSocketList);
  inherited Destroy;
end;
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110664
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
ну, теоретически... если сообщение как-то потеряется, то вот вам и утечка. :)
Угу. Недавно у себя исправлял такую ошибку. Переполнялась очередь сообщений :)
Dimitry Sibiryakov
Например, когда sizeof(WPARAM) <> sizeof(LPARAM) <> sizeof(Pointer).
Т.е. никогда
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110757
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Сомневаюсь, что когда-нибудь появится новая винда, в которой будет sizeof(LPARAM) <> sizeof(LPARAM) или <> sizeof(Pointer).

А вот хакерство мне да, сильно не нравится.
Кстати, там будет утечка памяти, всего лишь если PostMessage вернёт False. Надо хотя бы на результат проверять перед этим хаком (который, кстати, в следующих версиях дельфей вполне может перестать работать, в отличие от изменения параметров PostMessage).

Мало ли... как я говорил, проверка есть не просит и даже код не замедляет.
PostMessage вернёт False, если очередь заполнится, а это по умолчанию 10к мессаг в очереди. Проверка бесспорно нужна, но это скорее нештатный случай для главного потока.
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110777
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
antox
Ушел от инди где мог, по сокетам ничего не нашел... :(

Прям стало интересно, где же ты все-таки ушел от Инди, если это либа сетевых компонентов


TNetHTTPClient - очень понравилось :)
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110790
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
antox

... При отключении сервера с подключенными клиентами , выходит ошибка raised exception class EIdClosedSocket with message 'Disconnected.'. и способа корректно "отрубить" всех клиентов я не нашёл... Какая-то муйня

Код: pascal
1.
IdTCPServer.Bindings.Clear;

- при этом для каждого соединения вызовется CloseSocket, т.к.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
destructor TIdSocketHandle.Destroy;
begin
  CloseSocket;
  FreeAndNil(FConnectionHandle);
  FreeAndNil(FReadSocketList);
  inherited Destroy;
end;



Может перед
Код: pascal
1.
IdTCPServer.Bindings.Clear;

надо еще что-то вызвать? А то AV ловится
Код: pascal
1.
raised exception class $C0000005 with message 'access violation at 0x00e11014: read of address 0x00000000'
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110803
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока удалось решить ч-з try, но не нравится, в отладке всё равно дает ошибку

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  try
    if Srv.Active then Srv.Active :=False;
  finally
    if not Srv.Active then logAdd( 'success')
                            else logAdd( 'failed' );

    Result := not Srv.Active;
  end;
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110809
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
antox
пропущено...


Ушел от инди где мог, по сокетам ничего не нашел... :(

Как можно и в этом вопросе избавиться?

А книжку кто-то раньше тебя скачал, теперь там её нет?


Есть :) Там ооочень много инфы, пока не нашел по сокетам
...
Рейтинг: 0 / 0
TIdTCPServer.OnExecute & TQueue
    #40110822
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
проверка есть не просит и даже код не замедляет.
Но она код засоряет.
Fr0sT-Brutal
10к мессаг в очереди. Проверка бесспорно нужна, но это скорее нештатный случай для главного потока.
Да ладно, даже тут на форуме много раз я видел, как обсуждалось, что главный поток завис, а кто-то "зациклился".
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TIdTCPServer.OnExecute & TQueue
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]