Загрузка...

Как сделать **** без пропусков? Синхронизация потоков C#

Тема в разделе C# создана пользователем RaysMorgan 17 июл 2016. 1196 просмотров

Загрузка...
  1. RaysMorgan
    RaysMorgan Автор темы 17 июл 2016 https://lolz.live/support-tickets/open 51 794 7 мар 2013
    В большинстве ****ов есть пропуски, они возникают, когда в потоках без параметров нет синхронизации. Давайте же исправим этот недочет.

    В самом начале вашего основного класса создайте объект sync:
    Код
    public Object sync = new Object();
    [IMG]

    В самом потоке описываем код, отвечающий за выборку email:pass (login:pass) из основной базы:
    Сначала создадим приватную (доступная только в текущем потоке) переменную line, она будет содержать строку из базы:

    Код

    string line;

    Далее выбираем строку из базы:
    Код

    lock (sync)
    {
    line = ArrayLines[i];
    }
    *где i - текущий индекс массива (т.е. тип "пройдено строк"), ArrayLines - ваш массив со строками

    В моём проекте код выглядит следующим образом:
    Код

    public void ProxyThread ()
    {
    string line;
    while (i < CountLines)
    {
    lock (sync)
    {
    line = ArrayLines[i];
    i++;
    }

    try
    {
    // code
    }
    catch {
    // code
    }
    }
    }
     
  2. AKame
    Pishi vidosiki na youtube. stanesh populianim.
     
  3. vito2012
    vito2012 17 июл 2016 мда.. 10 17 июн 2016
    Спасибо, очень годно), как раз подобным занимаюсь, очень интересно, правда сложно не много, но все же)
     
  4. iPro_inactive
    iPro_inactive 21 июл 2016 Заблокирован(а) 30 15 июн 2016
    Увеличивать значение i нужно тоже в lock'е, ибо можно просто пропустить какой либо из элементов в массиве, если будет одновременно получен туда доступ из разных потоков
     
  5. RaysMorgan
    RaysMorgan Автор темы 21 июл 2016 https://lolz.live/support-tickets/open 51 794 7 мар 2013
    iPro_inactive, а как тебе идея насчёт перебрута? Ибо когда в кэтче уменьшаешь кол-во прочеканных, аккаунт тупо не чекается дальше из-за большого количества потоков?

    Типо такая:
    Пытаемся законнектится, если коннекта нет, то меняем проксю, увеличиваем переменную "всего прочекано", вводим переменную для визуального отображения в форме, мы ее не увеличиваем, а аккаунт, который пытались проверить суем в конец массива со строками, типо Array.Resize + baza[total_checked] = line;
    Теперь все аккаунты, которые чекались через бэд ******, будут проверяться в конце, могу код набросать
     
  6. iPro_inactive
    iPro_inactive 22 июл 2016 Заблокирован(а) 30 15 июн 2016
    А тут ничего не надо выдумывать, нужно вместо массивов и List'ов использовать очереди - Queue, в случае хреновой ****** или чего либо еще, просто добавлять аккаунт обратно. Это идеальный вариант, и рабочий самое главное. Проблем с недобрутом не наблюдал
     
  7. wh1tedoctor
    Вместо добавления аккаунта назад в список правильнее будет рекурсить
     
  8. iPro_inactive
    iPro_inactive 22 июл 2016 Заблокирован(а) 30 15 июн 2016
    Рекурсию делать нельзя, потому что на каждый новый объект запроса будет заниматься новая память, и так до тех пор пока из рекурсии не выйдешь, из-за хреновых проксих или т.п. из нее можно никогда не выйти
     
  9. wh1tedoctor
    Ну тогда использовать конструкции while(true) при обработке каждого запроса. При добавлении элемента назад в список можно столкнуться с несколькими критовыми траблами
     
  10. RaysMorgan
    RaysMorgan Автор темы 22 июл 2016 https://lolz.live/support-tickets/open 51 794 7 мар 2013
    iPro_inactive, кажется, допер.
    Сначала создаем очередь (Queue myQ = new Queue(); - при старте потока)
    Потом в потоках добавляем myQ.Enqueue(line)
    Типо, если плохая прокся, то мы ее меняем, если это бэд или гуд (хорошая прокся), то делаем myQ.Dequeue(line)

    Отличная идея, если честно, не знал про это
     
  11. RaysMorgan
    RaysMorgan Автор темы 26 авг 2016 https://lolz.live/support-tickets/open 51 794 7 мар 2013
  12. The228_inactive47873
    *********,Тогда сори, отмодерируйте мою тему
     
  13. RaysMorgan
    RaysMorgan Автор темы 26 авг 2016 https://lolz.live/support-tickets/open 51 794 7 мар 2013
    @The228,как только, так сразу
     
Top