Конференция "WinAPI" » Зависание программы с использованием Named Pipes [D7]
 
  • PonosetcDM © (14.01.11 10:28) [0]
    Здравствуйте, Уважаемые Знатоки!
     Я создаю канал в одной программе:
     pPipeHandle := CreateNamedPipe(pchar(pServerPipeName),
        PIPE_ACCESS_DUPLEX ,
        PIPE_WAIT or              
        PIPE_READMODE_BYTE or
        PIPE_TYPE_BYTE,
        PIPE_UNLIMITED_INSTANCES,        
        Sizeof(TPipeData),
        Sizeof(TPipeData),
        100,                  
        nil);
     if pPipeHandle = INVALID_HANDLE_VALUE then ExitThread(0);

     ConnectNamedPipe(pPipeHandle, nil);

     while not Terminated do    
       if not fWriting then
         if ReadFile(pPipeHandle, pData, sizeof(TPipeData), br, nil) then
           Synchronize(RefreshData);
     DisconnectNamedPipe(pPipeHandle);
     CloseHandle(pPipeHandle);

    А в другой программе, подключаюсь к нему:
     pPipeHandle := CreateFile(pchar(pServerPipeName),
        GENERIC_WRITE or GENERIC_READ,
        0,
        nil,
        OPEN_EXISTING,  
        0,
        0);

     if pPipeHandle = INVALID_HANDLE_VALUE then ExitThread(0);

     br := PIPE_WAIT or PIPE_READMODE_BYTE;

     if SetNamedPipeHandleState(pPipeHandle, br, nil, nil) then
     while not Terminated do
       if not fWriting then
         if ReadFile(pPipeHandle, pData, sizeof(TPipeData), br, nil) then
           Synchronize(RefreshData);
    //  DisconnectNamedPipe(pPipeHandle);
     CloseHandle(pPipeHandle);

    Т.о. я хочу создать канал на сервере, и подключится к нему клиентской программой, все отлично подключаемся.
    Но вот как только я, нажав на кнопку, делаю
     WriteFile(pPipeHandle, aData, sizeof(TPipeData), wr, nil);
    программа зависает, почему это происходит что я не так делаю...
  • PonosetcDM © (14.01.11 10:32) [1]
    Кстати, если я ставлю у канала не PIPE_ACCESS_DUPLEX, а PIPE_ACCESS_INBOUND/PIPE_ACCESS_OUTBOUNT, а подключаюсь к нему как GENERIC_WRITE/GENERIC_READ, то все работет..., но только в одну сторону...
  • Rouse_ © (14.01.11 11:50) [2]
    Возьми вот этот пример и сделай у себя примерно то-же, все будет работать:
    http://rouse.drkb.ru/network.php#fwiocompletionpipe
  • PonosetcDM © (14.01.11 12:20) [3]
    Каким образом лучше всего реализовать систему клиент-сервер, которая лолжна принимать и передавать сообщения и файлы как со стороны клиента, так и со стороны сервера, меня интересует реализация сетевого взаимодействия, подойдут ли для этого Named Pipes?
  • PonosetcDM © (14.01.11 12:21) [4]
    Rouse_ За пример спасибо!
  • Сергей М. © (14.01.11 13:09) [5]

    > как только я, нажав на кнопку, делаю WriteFile


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


    > программа зависает

    Ну а что ты хотел ? ССЗБ)
 
Конференция "WinAPI" » Зависание программы с использованием Named Pipes [D7]
Есть новые Нет новых   [134431   +11][b:0][p:0]