Паралельное выполнение цыкла

Тема в разделе "WASM.BEGINNERS", создана пользователем Anvil, 5 июл 2010.

  1. Anvil

    Anvil New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2008
    Сообщения:
    24
    Подскажите пожалуйста.
    Есть программа которая открывает сокет (открыт постоянно пока запущена программа)

    Как сделать так чтоб сокет продолжал висеть открытым и в тоже время выполнять другой кусок кода в цикле.
    (например выводить Hello World каждую минуту)
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Anvil
    создать поток?
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    spa
    Нафига поток. Разве оно не будет и так висеть открытым?
     
  4. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Pavia
    как я понял он синхронный режим юзает. Да вообще задача поставлена так что можно что угодно отвечать.
     
  5. Anvil

    Anvil New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2008
    Сообщения:
    24
    Я немного профан в асме, но потиху учусь.
    Сейчас попробую расписать задачу.
    есть
    Код (Text):
    1. MainProxy proc
    2.  
    3.     LOCAL   sckbind     : DWORD
    4.     LOCAL   saddr       : sockaddr_in
    5.     LOCAL   wdata       : WSADATA
    6.     LOCAL   sockver     : DWORD
    7.     LOCAL   port        : DWORD
    8.  
    9.     ;LOCAL  cout, cin   : DWORD
    10.     LOCAL   written     : DWORD
    11.     LOCAL   thrdID      : DWORD
    12.  
    13.     mov     cin, eax
    14.     .if ZERO?
    15.        
    16.         call    GetIParam
    17.        
    18.     .endif
    19.    
    20.  
    21.    
    22.     mov     port, 5777
    23.    
    24.  
    25.    
    26.     mov     sockver, 0202h
    27.    
    28.  
    29.    
    30.    
    31.     invoke  WSAStartup, sockver, ADDR wdata
    32.     invoke  socket, AF_INET, SOCK_STREAM, IPPROTO_TCP
    33.     mov     sckbind, eax
    34.    
    35.     .if     sckbind == INVALID_SOCKET
    36.        
    37.         jmp     @UnErr
    38.        
    39.     .endif
    40.    
    41.     mov     saddr.sin_family, PF_INET
    42.     invoke  htons, port
    43.     mov     saddr.sin_port, ax
    44.     mov     saddr.sin_addr.S_un.S_addr, INADDR_ANY
    45.     mov     saddr.sin_zero, 0
    46.     mov     [saddr.sin_zero + 4], 0
    47.  
    48.     invoke  bind, sckbind, ADDR saddr, sizeof sockaddr_in
    49.    
    50.  
    51.     .if     eax != 0
    52.        
    53.     .endif
    54.    
    55.     invoke  listen, sckbind, SOMAXCONN
    56.    
    57.    
    58.     .if     eax == 0
    59.    
    60.    
    61.        
    62.     .else
    63.        
    64.         jmp     @UnErr
    65.        
    66.     .endif 
    67.  
    68.  
    69.    
    70. @MainCycle:
    71.  
    72.     invoke  accept, sckbind, NULL, NULL
    73.     mov     ebx, eax
    74.    
    75.     invoke  CreateThread, NULL, 0, ClientWork, ebx, 0, ADDR thrdID
    76.  
    77.     jmp     @MainCycle  ; Next Client or Requiest
    78.      
    79.  
    80.  
    81.  
    82.      
    83. @UnErr:
    84.    
    85. ret
    86.  
    87.  
    88. MainProxy endp
    и есть

    Код (Text):
    1. go proc
    2. тут например вывод сообщения
    3. go endp
    MainProxy главная.
    Надо чтоб из нее был вызов go причем в цикле (например каждую минуту)

    Вот какая стоит задача. У меня не получается сооброзить как это сделать. если передаю управление go то сокет перестает отвечать.
     
  6. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    1)Выводить надпись в другом потоке.
    2) Использоваь WSA sockets, делать в циклу SleepEx( TIME_OUT , TRUE) + печать на экран.
     
  7. Anvil

    Anvil New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2008
    Сообщения:
    24
    Как?

    Вроде и используется WSA sockets и если я использую на процедуре go Sleep то выполняется она а сокет падает.

    П.С. Просьба не давать просто доводы и теории, все равно не пойму.
    Может ктонибуть привести примерный рабочий код?
    или дать ссылку где это есть.
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Anvil
    в гугле забанили?

    вообще, я думаю вам стоит писать на си, там примеров больше.
     
  9. Anvil

    Anvil New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2008
    Сообщения:
    24
    нет, не там искал :)

    IceCrashLdr
    Огромное спасибо. Все заработало.
     
  10. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Use select.