Загрузка...

Я вашу эту многопоточность Шарп-Шарп-Шарп делал :finger_down:

Тема в разделе C# создана пользователем Yotic 24 окт 2021. 254 просмотра

  1. Yotic
    Yotic Автор темы 24 окт 2021 Ебашу на C# всё что захотите(Разноцветное) 43 13 янв 2021
    Вот этот код:

    Код
    static List<bool> worked = new List<bool>();
    int xCoord = -100;
    public static void Start()
    {
    for (; xCoord < maxBlock; xCoord++)
    {
    List<Thread> threads = new List<Thread>();
    worked = new List<bool>();
    for (int i = 0; i < 3; i++)
    {
    threads.Add(new Thread(() => Work(xCoord + i)));
    threads[i].Start();
    worked.Add(true);
    }
    while (true)
    {
    if (worked.Where(x => x == true).ToList().Count != 0) Thread.Sleep(100);
    else break;
    }
    xCoord += secondArg;
    Save(@"C:\\p.txt", xCoord, countBedrock, coordinatesMinBedrockCount, coordinatesMaxBedrockCount);
    }
    }
    public static void Work(int x)
    {
    Console.WriteLine(x);
    int z = -1875000;
    dateStart = DateTime.Now;
    for (; z < maxBlock; z++)
    countBedrock += GetBedrockChunk(z, x);
    Console.WriteLine(xCoord + "||" + x);
    worked[xCoord - x] = false;
    }
    При запуске в консоль выводит "-100 -99 -100"
    А должно быть "-100 -99 -98" в любой последовательности
    ммм, я решил изменить немного код

    Код
    static List<bool> worked = new List<bool>();
    int xCoord = -100;
    public static void Start()
    {
    for (; xCoord < maxBlock; xCoord++)
    {
    List<Thread> threads = new List<Thread>();
    worked = new List<bool>();
    threads.Add(new Thread(() => Work(xCoord + 0)));
    threads.Add(new Thread(() => Work(xCoord + 1)));
    threads.Add(new Thread(() => Work(xCoord + 2)));
    worked.Add(true);
    worked.Add(true);
    worked.Add(true);
    threads[0].Start();
    threads[1].Start();
    threads[2].Start();
    while (true)
    {
    if (worked.Where(x => x == true).ToList().Count != 0) Thread.Sleep(100);
    else break;
    }
    xCoord += secondArg;
    Save(@"C:\\p.txt", xCoord, countBedrock, coordinatesMinBedrockCount, coordinatesMaxBedrockCount);
    }
    }
    public static void Work(int x)
    {
    Console.WriteLine(x);
    int z = -1875000;
    dateStart = DateTime.Now;
    for (; z < maxBlock; z++)
    countBedrock += GetBedrockChunk(z, x);
    Console.WriteLine(xCoord + "||" + x);
    worked[xCoord - x + 1] = false;
    }
    И этот код уже возвращает "-100 -99 -98" в любой последовательности
    То есть прошлый код не работает, а этот уже работает может кто рассказать, с хуяли это происходит?
     
  2. Pashok576
    Pashok576 25 окт 2021 Businessman 35 5 июн 2019
    всм в любой последовательности?
     
    1. Yotic Автор темы
      Pashok576, Ну т.к потоки асинхронны, они могут закончить работу в разное время и в консоль вывести не "100, 99, 98", а "99, 100, 98"
  3. lonely_femboy
    lonely_femboy 28 окт 2021 сыграй мне реквием 227 21 фев 2020
    Код
    worked.Where(x => x == true).ToList().Count != 0
    BadCode :facepalm:
     
    1. lonely_femboy
      Уфф. Заметил остальной код
Загрузка...
Top