Автор Тема: [Баг] Краш _NamedPipes_ConnectNamedPipe($hndlPipe,1)  (Прочитано 3396 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlexMerfi [?]

  • Новичок
  • *
  • Сообщений: 3
  • Репутация: 0
  • Пол: Мужской
  • Не курю
    • Награды
Взял пример с другого форума. Если заменить
Код: AutoIt [Выделить]
на
Код: AutoIt [Выделить]
то при выполнении скрипта он вешает AutoIt. Нельзя снять задачу по клику значку.
Если оставить как есть то краш системы. Версия AutoItа последняя стабильная.

Код: AutoIt [Выделить]
#Include <Misc.au3>
#Include <NamedPipes.au3>

Local Const $vzbEZ_PIPE_NAME = "\\.\pipe\vzbEZPipe"
   ;*********************************************
    ; Only the Pipe Server gets to the code below.
    ;*********************************************
    Local $hndlPipe
    Local $aPipeData[4]
    ; Create the named pipe. Get data from the pipe until a "DIE" message is received.
    $hndlPipe = _NamedPipes_CreateNamedPipe($vzbEZ_PIPE_NAME)
   If $hndlPipe <> -1 Then
;        Do
            ; wait for a client process to connect to an instance of a named pipe
         If _NamedPipes_ConnectNamedPipe($hndlPipe,1) Then
                $aPipeData = _NamedPipes_PeekNamedPipe($hndlPipe)
                $ff=FileOpen("alex.ddd",1)
            FileWriteLine($ff,$aPipeData[0])
            FileClose($ff)
                If Not _NamedPipes_DisconnectNamedPipe($hndlPipe) Then
                    ConsoleWrite(@LF & "Pipe Server:: DisconnectNamedPipe() Failed." & @LF)
                Endif
            Else
                ConsoleWrite(@LF & "Pipe Server:: connectNamedPipe() failed. " & @LF)
                Exit
            Endif
 ;       Until $aPipeData[0] == "DIE"
    Else
        ConsoleWrite(@LF & "Pipe Server:: _CreateNamedPipe() failed. " & @LF)
    Endif
 


Очень неудобно с пайпами работать.

Русское сообщество AutoIt

[Баг] Краш _NamedPipes_ConnectNamedPipe($hndlPipe,1)
« Отправлен: Январь 28, 2010, 10:03:34 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Баг] Краш _NamedPipes_ConnectNamedPipe($hndlPipe,1)
« Ответ #1, Отправлен: Январь 28, 2010, 18:54:49 »
AutoIt тут ни причем, так уж устроены pipes. Далее по пунктам:

  • AutoIt не зависает, он ждет соединения с клиентом.
  • Если не хочешь ждать, то используй параметр $iWait в функции _NamedPipes_CreateNamedPipe().
  • Крах скрипта происходит из за _NamedPipes_ConnectNamedPipe($hndlPipe, 1), так как параметр 1 тут вообще ни к месту (см. справку).
  • Вообще, для большинства задач достаточно WM_COPYDATA, зачем тебе вообще понадобились pipes? Если не секрет.


Думай, прежде чем говорить.

Оффлайн AlexMerfi [?]

  • Новичок
  • *
  • Сообщений: 3

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Не курю
    • Награды
Re: [Баг] Краш _NamedPipes_ConnectNamedPipe($hndlPipe,1)
« Ответ #2, Отправлен: Январь 29, 2010, 15:03:11 »
Я хотел написать в баг репорт, получилось для новичков. Изиняйте.
Этот код тоже ждет соединения с клиентом:
Код: AutoIt [Выделить]
;  look for client connection
;--------------------
While 1
$ConnectedSocket = TCPAccept( $MainSocket)
If $ConnectedSocket >= 0 Then
      while 1
      $recv = TCPRecv($ConnectedSocket, 2048)
        If $recv <> "" Then ExitLoop
    WEnd
ExitLoop
EndIf
Wend

Но почему то как и везде если напрямую без компиляции запустить то скрипт можно остановить в любой момент.
Здесь же либо ctrl+enter либо закрытием процесса. Баг? Баг. Виноват AutoIt. Я тут ни при чем.
Раз параметр ($hndlPipe, 1) ни к месту, то можно было бы обработать ошибку. Не обработали, баг? баг.
Пайпы понадобились для решения задачи: 100 клиентов-процессов должны передать 1 различный параметр 100 серверам-процессам за мин. промежуток времени.
из 100 пайпов дохнет 1-2 после 5-6 прогона по передачи данных. Все корректно открывается завершается вместе с процессом, но остаются 2-3 процесса в памяти.
Тспсокеты также. 1-2 в памяти из 100 удачных.
вм копидата с окнами. а надо консоль. Остаются запись чтение рандомных имен файлов между процессами. И винт через месяц подохнет от чтения записи. Либо в рам диск сувать.

Русское сообщество AutoIt

Re: [Баг] Краш _NamedPipes_ConnectNamedPipe($hndlPipe,1)
« Ответ #2 Отправлен: Январь 29, 2010, 15:03:11 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
2351 Просмотров
Последний ответ Январь 28, 2010, 18:52:15
от Yashied
4 Ответов
3295 Просмотров
Последний ответ Сентябрь 04, 2010, 04:13:37
от Heler