[ASM] Потоки

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ChernoHod, 22 Oct 2011.

  1. ChernoHod

    ChernoHod New Member

    Joined:
    20 Mar 2011
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Привет.

    Вот есть фрагмент кода.Создаю поток,в потоке идет конект к хосту и посылка пакета.
    Code:
    att:
    
            push   0
            push   0
            push   0
            push   potok
            push   2000h
            push   0
            call   [CreateThread]                           ; создаем поток
    
            mov    [t_handle],eax                           ; его хендл
    
            mov    eax,-1
            push   eax
            push   [t_handle]
            call   [WaitForSingleObject]                    ; ждем завершения потока
    
            invoke Sleep,1500                               ; ждем
            jmp     att                                     ; повторяем
    
        
    
     proc potok
    
            invoke   socket,AF_INET,SOCK_STREAM,6
            xchg     eax,esi
    
            invoke   connect,esi,saddr,sizesaddr            ; конект ту сервер
    
            invoke   send,esi,sendbuf,[sizeh],0             ; Сенд   ту сервер
    
          ; invoke   recv,[hSock],recvbuf,3000,0            ; ответ
    
            invoke   closesocket,esi
    
            invoke   TerminateThread,[t_handle],0           ; Прерываем поток
    
            ret
    
     endp
    Вопрос.
    Как правельнее и проще сделать чтоб даный код (proc potok) исполнялся в 10-20 потоков ?
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    все просто,можно задать одну локальную переменную
    ну вот так к примеру:

    Code:
    .386
    .model flat,stdcall
    option casemap:none
    include include\user32.inc
    include include\kernel32.inc
    
    includelib lib\kernel32.lib
    includelib lib\user32.lib
    Thread proto
    .code
    start:
    call	potok
    
    
    potok proc
    local id
    push 5d
    pop ecx
    r:
    push ecx
    invoke CreateThread,0,0,offset Thread,0,0,addr id
    pop ecx
    loop r
    ret
    potok endp
    
    Thread proc
    invoke MessageBox,0,0,0,0
    invoke ExitProcess,0
    Thread endp
    
    end start
    в любом нормальном task manager можешь посмотреть кол-во потоков
     
    1 person likes this.
  3. ChernoHod

    ChernoHod New Member

    Joined:
    20 Mar 2011
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Точто надо.Спасибо DooD .