![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Проблема в том что при отправке данных через сокет сначало всё нормально, но если запустить ёмкую программу, то обработка отправки прерывается. Прерывание возможно происходит на миллисекунды, но это критически важно. Что бы не было прерываний. Передаётся звук. Как увеличить приоритет отправки (send) и приёма данных?
Вот листинги того что есть сейчас: Отправка буфера: Код:
function WlanSendBuffer(Buffer: Pointer; DataSize: Integer): Boolean; var AmountSent: Integer; Position : Integer; BytesLeftToWrite: Integer; BytesToWrite: Integer; DataPointer: PByte; // arg1:u_long; begin sendr:=false; DataPointer := Buffer; Position := 0; BytesToWrite := 0; // arg1:=1; // IOCtlSocket (SocketHandle,FIONBIO,arg1); while (Position < DataSize) do begin BytesLeftToWrite := DataSize - Position; if (BytesLeftToWrite > 0) then begin if BytesLeftToWrite > 2048 then BytesToWrite := 2048 else BytesToWrite := BytesLeftToWrite; end; AmountSent := send(ClientHandle, DataPointer^, BytesToWrite, 0); if (AmountSent = SOCKET_ERROR) then begin Result := False; Exit; end; Inc(DataPointer, AmountSent); Position := Position + AmountSent; end; // arg1:=0; // IOCtlSocket (SocketHandle,FIONBIO,arg1); Result := True; sendr:=true; end; Создание сокета: Код:
function WlanStartServer() : Boolean; var arg: Integer; IPs: String; begin Result := False; WSAStartup($101, WSADataStruct); // Create socket SocketHandle := Winsock.socket(PF_INET, SOCK_STREAM, 0); if (SocketHandle = INVALID_SOCKET) then begin MessageDlg('socket() failed!', mtError, [mbOK], -1); Exit; end; // Bind socket SockAddr.sin_family := AF_INET; SockAddr.sin_addr.S_addr := INADDR_ANY; SockAddr.sin_port := htons(17584); if (bind(SocketHandle, SockAddr, sizeof(SockAddr)) = SOCKET_ERROR) then begin MessageDlg('The port used by the PSPdisp server is in use. Probably another instance is already running.', mtError, [mbOK], -1); //MessageDlg('bind() failed!', mtError, [mbOK], -1); Exit; end; // Start listening, only accept 1 client (0 clients in backlog) if (listen(SocketHandle, 1) = SOCKET_ERROR) then begin MessageDlg('listen() failed!', mtError, [mbOK], -1); Exit; end; arg := 1000; setsockopt(SocketHandle, SOL_SOCKET, SO_RCVTIMEO, @arg, sizeof(arg)); setsockopt(SocketHandle, SOL_SOCKET, SO_SNDTIMEO, @arg, sizeof(arg)); // Show "Server started" message IPs := GETAllIPAddresses(); MainForm.OptionsWlanAddress.Caption := Ips; if MainForm.OptionsWlanNotifyStart.Checked then MainForm.ShowBalloonHint('PSPdisp: Server started', 'Please connect your PSP to the following IP address:' + #10 + Ips, bfInfo); Result := True; end; |