Многопоточность

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by vssh, 6 Feb 2012.

  1. vssh

    vssh New Member

    Joined:
    14 Apr 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    delphi 7

    В коде идет следующий алгоритм:
    1) при нажатии на кнопку запускается указанное кол-во потоков
    2) каждый поток отправляет пост запрос и в зависимости от полученного ответа делает в case: rez=0 или rez=1

    так вот при получении rez=1 даже одним из потоков нужно чтобы останавливались все потоки, как организовать?
     
    #1 vssh, 6 Feb 2012
    Last edited: 7 Feb 2012
  2. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    ЯП какой?
     
  3. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    При каждой итерации цикла внутри потока проверяй какую-нибудь переменную логического типа и завершай работу потока, если требуется.
     
  4. vssh

    vssh New Member

    Joined:
    14 Apr 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    а какая команда завершает работу потока?

    к сожалению не знаю что такое ЯП
     
  5. zORG

    zORG New Member

    Joined:
    5 Jun 2010
    Messages:
    44
    Likes Received:
    2
    Reputations:
    0
    :eek:
    Это печально...
     
  6. stepashka_

    stepashka_ Мотоциклист

    Joined:
    9 Nov 2009
    Messages:
    1,018
    Likes Received:
    418
    Reputations:
    232
    Язык программирования.
     
  7. vssh

    vssh New Member

    Joined:
    14 Apr 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    извиняюсь) просто ниразу не слышал аббревиатуры ЯП)

    delphi 7

    В коде идет следующий алгоритм:
    1) при нажатии на кнопку запускается указанное кол-во потоков
    2) каждый поток отправляет пост запрос и в зависимости от полученного ответа делает в case: rez=0 или rez=1

    так вот при получении rez=1 даже одним из потоков нужно чтобы останавливались все потоки, как организовать?
     
    #7 vssh, 7 Feb 2012
    Last edited: 7 Feb 2012
  8. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    487
    Likes Received:
    184
    Reputations:
    5
    как вариант создать глобальную переменную
    bool work =true;
    и при каждой итерации в потоках проверяется эта переменная.

    Если rez==1 то назначить work =false;
    Далее все потоки при каждой итерации проверяют переменную work
    Если work == false; То завершить поток , например методом break;

    >а какая команда завершает работу потока?
    Если поток работает в цикле то можно так
    while(work == true)
    {
    //Какие то твои операции
    }
     
    #8 rudi, 7 Feb 2012
    Last edited: 7 Feb 2012
    1 person likes this.
  9. vssh

    vssh New Member

    Joined:
    14 Apr 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    спасибо
    достаточно было в критической секции добавить if Rez=1 then Work:=False;
     
  10. vssh

    vssh New Member

    Joined:
    14 Apr 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    теперь ещё один небольшой вопрос появился...

    сейчас брутер действует так:
    1) в edit1 вбиваем url сайта
    2) подгружаем в брутер список паролей
    3) он на указанный url пробует пропостить все пароли ну и действует по указанному выше алгоритму

    а как сделать чтобы можно было подгружать список url? т.е. подгруженный список паролей постит сначала на первый url из списка, затем на второй и т.д.???

    вот отрывок из кода:
    Code:
     while Work do
       begin
       CS.Enter;
       Inc(Pass);
       if Pass<Passwords.Count then CurPass:=Pass else Work:=False;
       CS.Leave;
     
    #10 vssh, 7 Feb 2012
    Last edited: 7 Feb 2012
  11. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    487
    Likes Received:
    184
    Reputations:
    5
    можно создать массив URL - опять таки глобальный, чтобы потоки имели к нему доступ.
    Или же в каждом потоке создавать такой массив URL еще на этапе создания и инициализации потокв, чтобы потоки не юзали один и тотже массив URL.
    И обращаться к нему к массиву через какую нить переменную счетчик
     
  12. vssh

    vssh New Member

    Joined:
    14 Apr 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    спасибо, решил
     
    #12 vssh, 7 Feb 2012
    Last edited: 7 Feb 2012