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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2015, 15:34   #11
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну и к чему этот "весьма информативный" пост? Не надоело еще писать бессмысленные фразы?
Человек посты набивает - не будем ему мешать нашим обсуждением
По теме:
Я из кривого скрипто-движка паскаля, т.к. там нету окон и нельзя сделать нормальный интерфейс отправляю информацию в интерфейс написанный на делфи.
Отправляю этим вот кодом:
Код:
Function SendString(stringToSend : string):Integer;
var
   copyDataStruct : TCopyDataStruct;
begin
   copyDataStruct.dwData := 0; 
   copyDataStruct.cbData := 1 + Length(stringToSend)*2 ;
   copyDataStruct.lpData := PChar(stringToSend);
   REsult:=SendData(copyDataStruct) ;
   if REsult<=0 then
   begin
    print(stringToSend);
    if REsult<=0 then if assigned(Socket) then Socket.SendString(stringToSend);
   end;
end;

Function SendData(const copyDataStruct: TCopyDataStruct):Integer;
 var
    res : integer;
    szRetText: PChar;
begin
  //print(receiverHandle); 
  if receiverHandle = 0 then
  begin
    receiverHandle :=FindWindowW('Tfmain',''); //FindWindowEx(0,0,PChar('TReceiverMainForm'),PChar('ReceiverMainForm'));
    if receiverHandle = 0 then
    begin
      print('Can`t find Window '+string(copyDataStruct.lpData));
      Exit;
    end;
  end;                           
  REsult:=(SendMessageW(receiverHandle, WM_COPYDATA, Integer(receiverHandle), Integer(@copyDataStruct)));
end;

begin
while delay(100) do
if (LB.IndexOf(temp[1]+temp[2]+' '+' '+temp[0]) = -1) then
    begin
      LB.add(temp[1]+temp[2]+' '+' '+temp[0]);
      SendString('add '+temp[1]+temp[2]+' '+' '+temp[0]+' '+temp[4]+' '+State+' '+temp[3]);
    end else
    if Counter>5 then
      SendString('edt '+temp[1]+temp[2]+' '+' '+temp[0]+' '+temp[4]+' '+State+' '+temp[3]);
end.

Вот принимающая сторона:

Код:
procedure Tfmain.WMCopyData(var Msg: TWMCopyData) ;
var
  s : string;
  strl:TStringDynArray;
  i,j,frow,Result:integer;
begin
try
  s := PChar(Msg.CopyDataStruct.lpData) ;
  Result := 0;
  strl:=SplitString(s,' ');
  case Tmsgt(GetEnumValue(TypeInfo(Tmsgt), 'msg_' + strl[0])) of
  msg_add:
  if Grid.cols[0].IndexOf(strl[2])=-1 then
  begin
    if (Grid.Cells[Grid.ColCount-1, Grid.RowCount-1]<>'') then  Grid.RowCount:=Grid.RowCount+1;
    for I := 2 to High(strl) do
      Grid.Cells[i-2, Grid.RowCount-1] := strl[i];
    Grid.Cells[Grid.ColCount-1, Grid.RowCount-1] :=strl[1];
    if (Grid.RowCount>2) then SortStringGrid(Grid,Grid.ColCount-1);
    Result := 1;
  end;
  msg_edt:
  if Grid.cols[0].IndexOf(strl[2])<>-1 then
  begin
    frow:=Grid.Cols[0].IndexOf(strl[2]);
    if frow <> -1 then
    begin
      for I := 2 to High(strl) do
        Grid.Cells[i-2, frow] := strl[i];
      Grid.Cells[Grid.ColCount-1, frow] :=strl[1];
    end;
    Result := 2;
  end;
except
  Result := -1;
end;
  msg.Result:=Result;
end;
АП: Как уже выше написал пишу весь этот геморой из-за надобности в интерфейсе, а если вообще задача - отображаю красиво текущие данные из игры (список игроков прядом).

Последний раз редактировалось IvaniuS; 18.04.2015 в 15:38.
IvaniuS вне форума Ответить с цитированием
Старый 18.04.2015, 15:41   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ноль целых фик десятых
Ну для тебя понятно что ноль. Тут я не удивлен. Синдром Кеттмара всегда все на ноль сводит.
Цитата:
а если не в курсе
Ты еще лурк или удафф тут мне цитировать начни. Самый раз твоему мирку.

P.S. Можешь не отвечать, толку от твоей реплики. И вообще сколько раз я тее говорил - не знаешь что ответить проходи мимо.

Цитата:
Человек посты набивает - не будем ему мешать нашим обсуждением
Ладно. Уговорил.
Цитата:
Я из кривого скрипто-движка паскаля
А-а-а... Вот оно что... Я думал тут сокеты задействованы... А ты вывод-ввод этого движка перенаправить в пайпы не желаешь?
ИМХО копипастэ как-то не очень функционально для такого межпроцессового обмена.
I'm learning to live...

Последний раз редактировалось Stilet; 18.04.2015 в 15:44.
Stilet вне форума Ответить с цитированием
Старый 18.04.2015, 15:42   #13
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
нашим обсуждением
не смешите мои тапочки, обсуждения... и про что вы тут обсуждаете?

вы сами не понимаете про что говорите, то про синапс заикнулись, и что он у вас там "запасает"?

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

Цитата:
Синдром Кеттмара
ух ты, а откуда про него знаете?
lomastr_ вне форума Ответить с цитированием
Старый 18.04.2015, 15:56   #14
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Сокеты используются смотрите внимательно на отправку:
Код:
Function SendString(stringToSend : string):Integer;
var
   copyDataStruct : TCopyDataStruct;
begin
...
   REsult:=SendData(copyDataStruct) ;
   if REsult<=0 then //ЕСЛИ ПРОИЗОШЛА ОШИБКА В ОБРАБОТКЕ
   begin
    print(stringToSend);
    if assigned(Socket) then Socket.SendString(stringToSend); //ОТПРАВЛЯЕМ С ПОМОЩЬЮ СОКЕТА
   end;
end;
Я вообще думал просто и нагло залезть в память процесса и выдирать куски мяса данных....

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
то обрабатывать не успевают то как отправлять не занют а что куда зачем
Я ищу проблему, не знаю где она кроется в посылке\приеме или в обработке этих сообщений.
мне приходится отправлять по 5-6 раз из-за того что он не успевает обработать сообщение, но понимаю почему очередь не хочет работать.

Последний раз редактировалось IvaniuS; 18.04.2015 в 16:04.
IvaniuS вне форума Ответить с цитированием
Старый 18.04.2015, 17:16   #15
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

АП: Половина проблемы решена - как оказалось все-таки быстрее обрабатывать сразу кучу быстрее и на много и ошибок меньше т.е. я собираю пакет отправляю его и на стороне клиента уже обрабатываю его.
IvaniuS вне форума Ответить с цитированием
Старый 18.04.2015, 17:17   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
да и вообще пока комментировать нечего
Вот и молчи.
Цитата:
смотрите внимательно на отправку
Изначально в топе не было этого кода.
Если так то по барабану как отправлять, хоть целиком хоть по частям. Прирост скорости не обязательно будет. Лично я сначала данные засовываю в TMemoryStream а потом его отправляю целиком.
Цитата:
Я вообще думал просто и нагло залезть в память процесса и выдирать куски мяса данных....
Не. Это неудачная идея.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2015, 17:52   #17
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

ну проблема на 50% решена, как оказалось я правильно думал в верном направлении, сейчас все проверяю, на небольших массивах 100+-50 ведет себя отлично - в разы лучше чем было (потери снизились до 1% с 15% и скорость отображения увеличилась до моментальной (зрительно)).
Сделал пакетную отправку и пакетную обработку.
IvaniuS вне форума Ответить с цитированием
Старый 18.04.2015, 18:12   #18
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
//ЕСЛИ ПРОИЗОШЛА ОШИБКА В ОБРАБОТКЕ
//ОТПРАВЛЯЕМ С ПОМОЩЬЮ СОКЕТА
т.е. тут ошибки быть не может? тогда нафик отправлять по первому варианту? а если может, то надо 3, какой http? а потом и 4 ...
Цитата:
мне приходится отправлять по 5-6 раз из-за того что он не успевает обработать сообщение
кто он, какое сообщение и почему не успеет?
lomastr_ вне форума Ответить с цитированием
Старый 18.04.2015, 18:20   #19
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Цитата:
кто он
- клиент
Цитата:
почему не успеет
- по тому что много времени отрисовка занимает или ошибка другая возникает, у меня там в Гриде много картинок, граддиенты и т.д.
IvaniuS вне форума Ответить с цитированием
Старый 18.04.2015, 18:38   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у меня там в Гриде много картинок, граддиенты и т.д.
Прекрати использовать грид как средство для хранения и анализа данных, и тормозов не будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактировать данные RedScreenOfLife ASP.NET 0 16.10.2012 22:07
Редактировать программу. TiP-A-ToP Помощь студентам 1 03.11.2011 20:23
Как редактировать видео? jetyb C# (си шарп) 1 12.07.2011 17:11
От редактировать таблицу Svist Microsoft Office Excel 9 30.12.2010 09:36
Как динамично быстро загрузить в компонент Stringgrid 34 символа? SkAndrew Общие вопросы Delphi 11 13.04.2008 12:42