Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Ошибка при компиляции


Автор: slesar123 4.6.2020, 16:18
При компиляции выдает 2 ошибки, как это можно исправить?

Задание звучит так: Требуется разработать многопоточное приложение (в качестве средства разработки следует использовать Microsoft Visual Studio). Приложение состоит из 4 потоков:
• “main” (главный поток): запускает потоки “inc”, “dec” и “print”. Далее, поток постоянно (каждые 10 миллисекунд) проверяет значение переменной ACCOUNT и завершает процесс, если ACCOUNT вышел за границы диапазона [-10000, +10000].
• “inc” – поток время от времени (паузы выбираются случайным образом от 100 миллисекунд и до 3 секунд включительно) увеличивает значение переменной ACCOUNT на некоторую случайную величину (например от 1 до 100).
• “dec” – поток время от времени (паузы выбираются случайным образом от 100 миллисекунд и до 3 секунд включительно) уменьшает значение переменной ACCOUNT на некоторую случайную величину (например от 1 до 100).
• “print” – выводит на экран новое значение переменной ACCOUNT (как только оно изменилось).

Код

namespace ConsApp_ThreeThreads
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            long account = 0;
            AutoResetEvent accountChangedEv = new AutoResetEvent(false);
 
            var incThread = new Thread(new ThreadStart(() =>
            {
                while (!IsFinished(account))
                {
                    Interlocked.Add(ref account, rnd.Next(1, 100));
                    accountChangedEv.Set();
 
                    Thread.Sleep(rnd.Next(100, 3001));
                }
            }));
 
            var decThread = new Thread(new ThreadStart(() =>
            {
                while (!IsFinished(account))
                {
                    Interlocked.Add(ref account, -rnd.Next(1, 100));
                    accountChangedEv.Set();
 
                    Thread.Sleep(rnd.Next(100, 3001));
                }
            }));
 
            var printThread = new Thread(new ThreadStart(() =>
            {
                while (!IsFinished(account))
                {
                    accountChangedEv.WaitOne();
                    Console.WriteLine("Account изменено на " + account);
                }
            }));
 
            printThread.Start();
            incThread.Start();
            decThread.Start();
 
            incThread.Join();
            decThread.Join();
            printThread.Join();
 
            Console.WriteLine("Работа завершена!");
            Console.ReadKey();
        }
 
        static bool IsFinished(long account)
        {
            return account < -10000 || account > 10000;
        }
    }
}


user posted image

Автор: xvr 5.6.2020, 10:29
Это НЕ С++. Похоже на С#

Автор: kahari 22.6.2020, 14:47
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)