Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распределение памяти ( Зависает send() ), Неверное распределение памяти? 
:(
    Опции темы
Aeore
Дата 12.10.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



Уже несколько часов сижу - не могу понять почему не работает. И так - в следующем коде, при выполнении функции send() компьютер зависает намертво. Сам код является частью процедуры Execute() потока. Задача кода - составить пакет из структуры TAUD_SESSION_DATA и звуковых данных по адресу 
PWAVEHDR(Msg.lParam)^.dwBytesRecorded и послать его на сокет. Все данные есть, нужно только запихнуть их в буфер и послать. Отладчик тоже говорит, что все данные доступны и в буфер нормально добавляются. И так, код:


Код

type
  PAUD_SESSION_DATA = ^TAUD_SESSION_DATA;
  TAUD_SESSION_DATA = packed record
    Msg: Byte;  
    Len: Word; 
  end;

const
  AUD_AUDIO_DATA                                               = $08;

var
  buf: Pointer;
  _AUD_SESSION_DATA: TAUD_SESSION_DATA;
  Msg: TMsg;
  AudioSize: Cardinal;
  AudioData: PAnsiChar;

begin
  ... ... ... GetMessage(Msg, 0, 0, 0) ... ...
  ...
  AudioSize := PWAVEHDR(Msg.lParam)^.dwBytesRecorded;
  AudioData := PWAVEHDR(Msg.lParam)^.lpData;

  _AUD_SESSION_DATA.Msg := AUD_AUDIO_DATA;
  _AUD_SESSION_DATA.Len := AudioSize;

  GetMem(buf, SizeOf(TAUD_SESSION_DATA) + AudioSize);
  CopyMemory(buf, @_AUD_SESSION_DATA, SizeOf(TAUD_SESSION_DATA));
  CopyMemory(Pointer(Integer(buf) + SizeOf(TAUD_SESSION_DATA)), AudioData, AudioSize);

  send(fSocket, buf^,  SizeOf(TAUD_SESSION_DATA) + AudioSize, 0);
  FreeMem(buf);

  ...
end;


////////////////////////////////
PWAVEHDR(Msg.lParam).dwBytesRecorded = 327


Удивительное наблюдение: если убрать строку

Код

_AUD_SESSION_DATA.Len := AudioSize;


то send() не зависает. Почему??

PM MAIL ICQ   Вверх
Romikgy
Дата 12.10.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



ну по минимуму 
Цитата(Aeore @  12.10.2009,  13:02 Найти цитируемый пост)
 PWAVEHDR(Msg.lParam)^.dwBytesRecorded

имеет dword 
Цитата(Aeore @  12.10.2009,  13:02 Найти цитируемый пост)
TAUD_SESSION_DATA = packed record
    Msg: Byte;  
    Len: Word; 
  end;

len имеет word


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Aeore
Дата 12.10.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



ну и что - он должен записать в ворд то, что поместится (а у меня пакеты больше чем 300-500 байт вообще исключены).  При том, это никак не может повлиять на зависание send'a.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.