Загрузка...

Проблема с чекером и многопоточностью

Тема в разделе C# создана пользователем Pashok576 31 авг 2021. 301 просмотр

  1. Pashok576
    Pashok576 Автор темы 31 авг 2021 Businessman 35 5 июн 2019
    Описание проблемы: при нескольких аккаунтах берет один и тот же аккаунт, хотя так быть не должно.
    Код:
    Код
    public string[] accounts;
    private async void threadAsync()
    {

    var accs = new List<string>(accounts);
    while (accs.Count!= 0)
    {
    string acc = accounts[0];


    accs.RemoveAt(0);
    try
    {
    string subs = await GetAuthAsync(acc);
    richTextBox1.AppendText($" Account:{acc}, subs:{subs}");
    }
    catch(Exception ex)
    {
    MessageBox.Show($"Ошибка: -- {ex}");
    }


    }
    }
    private async void button1_Click(object sender, EventArgs e)
    {
    accounts = textBox2.Text.Split('\n');
    int proces_count = Convert.ToInt32(textBox1.Text);
    for(int i = 0; i < proces_count; i++)

    {
    Thread t = new Thread(new ThreadStart(threadAsync));
    // Start ThreadProc. Note that on a uniprocessor, the new
    // thread does not get any processor time until the main thread
    // is preempted or yields. Uncomment the Thread.Sleep that
    // follows t.Start() to see the difference.
    t.Start();
    }
     
  2. throwyourfears
    throwyourfears 31 авг 2021 Заблокирован(а) 386 8 апр 2021
    Блять ну нахуя делать через while когда существуют foreach?
    Прочитал файл, разбил на строки и ебашишь массив через foreach
    --- Сообщение объединено с предыдущим 31 авг 2021
    C#
    string[] lines = File.ReadAllLines("test.txt");
    foreach (string line in lines)
    {
    // что-нибудь делаем с прочитанной строкой line
    }
     
    1. Посмотреть предыдущие комментарии (7)
    2. wDude
      throwyourfears, читай тему, у него несколько потоков, разные потоки берут один и тот же элемент массива, для того чтобы этого избежать он удаляет первый элемент, чтобы другой поток взял уже другой элемент массива
    3. throwyourfears
      wDude, я ему предложил использовать foreach, он перебивает весь список и не будет повторов никаких
    4. wDude
      throwyourfears, я понял к чему клонишь. Ты хочешь, чтобы он внутри цикла вызывал асинхронный метод с параметром. Ну пускай пробует.
  3. TheWall_inactive2650523
    TheWall_inactive2650523 31 авг 2021 Waiting for the worms to come 52 23 сен 2019
    Во первых скорее всего ты через другой поток не достучишься до элементов управления в главном потоке - можно использовать invoke, во вторых ты присваиваешь в массив accounts что то перед новым потоком, в новом потоке потоке ты берешь в переменную acc первый элемент из массива accounts, разве у тебя не должен результат быть каждый раз один
     
    1. Pashok576 Автор темы
    2. Pashok576 Автор темы
      TheWall_inactive2650523,
      Код

      public string[] accounts;
      List<string> accs;
      private async void threadAsync()
      {


      while (accs.Count!= 0)
      {
      string account = accounts[0];


      accs.RemoveAt(0);
      try
      {
      string subs = await GetAuthAsync(account);
      richTextBox1.AppendText($" Account:{account}, subs:{subs}");
      }
      catch(Exception ex)
      {
      MessageBox.Show($"Ошибка: -- {ex}");
      }


      }
      }
      private async void button1_Click(object sender, EventArgs e)
      {

      accounts = textBox2.Text.Split('\n');
      accs = new List<string>(accounts);
      int proces_count = Convert.ToInt32(textBox1.Text);
      for (int i = 0; i < proces_count; i++)

      {
      Thread t = new Thread(new ThreadStart(threadAsync));
      // Start ThreadProc. Note that on a uniprocessor, the new
      // thread does not get any processor time until the main thread
      // is preempted or yields. Uncomment the Thread.Sleep that
      // follows t.Start() to see the difference.
      t.Start();
      }



      // Start ThreadProc. Note that on a uniprocessor, the new
      // thread does not get any processor time until the main thread
      // is preempted or yields. Uncomment the Thread.Sleep that
      // follows t.Start() to see the difference.

      ////foreach (var accs in accounts)
      ////{

      //// string email = accs.Split(':')[0];
      //// string pass = accs.Split(':')[1];
      //// string subs = await GetAuthAsync($"{email}:{pass}");
      //// richTextBox1.AppendText($" Account:{accs}, subs:{subs}");
      ////}



      }
      чего то не получается((
  4. CoderVir
    Вот именно. Если ты питонист, то тебя говной воняет, через форум чувствую. Рассказываю как определить питониста в данном разделе да и на форумах. По ключевым словам, ебаный шашлык.
    Любой питонист употребляет "мульти", в данном случаи "мультипоточность". В сишарпе нету такого понятия, в C# есть понятие МНОГОПОТОЧНОСТЬ. МУЛЬТИПОТОЧНОСТЬ - ЭТО ТАМ, В КРУЖКЕ ЮНЫХ ДОЛБОЁБОВ. Сейчас бы while в таких случаях использовать, да ты бы ещё винапи подкрутил, ахуеть ты потоки ловко запускаешь:finger_up:, а даже сначала этого не понял, МОЛОДЕДЦ. Питонистам сами знаете где место
     
    1. CoderVir
      @CoderVir, почему то в данном случаи хочется только напеть песенку- охуели, бабы охуели. Нету сил моих.
    2. Pashok576 Автор темы
      @CoderVir, да я малым был(хотя и щас мне 15), когда питон изучать начал, щас понимаю, что уходить нужно
  5. uloo
    uloo 31 авг 2021 продам рекламу в профиле
    где выучить с++ народ, я смотрю тут шарящие собрались
     
    1. Посмотреть предыдущие комментарии (3)
    2. uloo
      @CoderVir, понятно, никто и не спорил, но конкретно какой?
    3. CoderVir
      Pashok576, чувак, это маркетинговый ход. А по сути кидалово:da:, расчитаное на дядичек 30+. А если ты хочешь чему то обучится и у тебя есть стремление, то тебе курсы нахуй не нужны. Задача курсов в этом плане- научить учится и всё, поднести основы. А основы все в интернете, ютюбе. Дальше после того как изучил основы, начинаешь изучать определённые библиотеки, ну допустим написание ботов telegram.bot(в C# тоже есть). Ну и всё, получилось пару ботов и идешь делать деньги.
    4. Pashok576 Автор темы
      @CoderVir, я знаю
  6. tracs
    tracs 31 авг 2021 2 13 янв 2017
    Навоняли тут горе-кодеры выше, но практически ничего дельного так и не смогли сказать. А разговоров-то устроили.., печально)

    Код
    public string[] accounts;
    public List<string> accs;

    private async void threadAsync()
    {
    while (accs.Count!= 0)
    {
    var account = string.Empty;
    lock(accs)
    {
    account = accs[0];
    accs.RemoveAt(0);
    }
    try
    {
    string subs = await GetAuthAsync(account);
    richTextBox1.AppendText($" Account:{account}, subs:{subs}");
    }
    catch(Exception ex)
    {
    MessageBox.Show($"Ошибка: -- {ex}");
    }


    }
    }
    private async void button1_Click(object sender, EventArgs e)
    {
    accounts = textBox2.Text.Split('\n');
    accs = new List<string>(accounts);
    int proces_count = Convert.ToInt32(textBox1.Text);
    for (int i = 0; i < proces_count; i++)

    {
    Thread t = new Thread(new ThreadStart(threadAsync));
    t.Start();
    }
    }

    Подробней тут: https://metanit.com/sharp/tutorial/11.4.php
     
    1. Pashok576 Автор темы
      tracs, ля, опять я затупил, :D
    2. Осанка
      tracs, о, хоть кто-то про это написал. Ещё как вариант можно использовать потокабезопасную очередь.
Загрузка...
Top