| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Сохранение данных из WM_COPYDATA |
| Автор: <Spawn> 3.9.2003, 08:54 | ||||
| При перехвате пакета перекидываю его в свою прогу при помощи WM_COPYDATA. Но как не пытался не получалось сделать сохранение всех данных CopyMemory или Move. Пришлось в цикле сохранять, но скорость тут очень критична, поскольку нельзя на долго приостанавливать пакет, так как тормоза тогда будут... А WM_COPYDATA можно использовать только с SendMessage. Сейчас так:
А хотелось бы что бы было например так:
|
| Автор: p0s0l 3.9.2003, 16:19 |
| надо так: CopyMemory(@Packets[CurrentPacketN-1].Buf[0],@Buf,Len); |
| Автор: <Spawn> 4.9.2003, 07:39 |
| p0s0l Access Violetion |
| Автор: <Spawn> 4.9.2003, 07:55 |
| Как ни странно, но на этот цикл уходит не больше 10 млс(а за частую вообще 0 показывает!!!). Как такое может быть, ведь в нем 8192 итерации?(Проверял при помощи GetTickCount): StartTime:=GetTickCount; pb:=PByte(buf); for i:=0 to len-1 do begin Packets[CurrentPacketN-1].Buf[i]:=pb^; Inc(pb); end; Dec(pb,len); EndTime:=GetTickCount; AddMessage(Format('time - %d',[EndTime-StartTime])); |
| Автор: p0s0l 4.9.2003, 19:44 | ||||
| Я плохо посмотрел, надо было так: CopyMemory(@Packets[CurrentPacketN-1].Buf[0],pointer(Buf),Len);
Еще бы! Это же тебе не спектрум...
Просто дискретность GetTickCount равняет 10 мс, т.е. если прошло 9 мс, то GetTickCount выдаст 0. |
| Автор: <Spawn> 6.9.2003, 08:46 |
| Хм. Так действительно все работает. Спасибо ) |