Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 00:36   #1
andresan
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 33
По умолчанию С# лаба, заплачу

Код:
//Использование инструкции lock для синхронизации доступа к объекту
using System;
using System.Threading; //необходимо подключать это пространство
//для многопоточных приложений
class SumArray
{
    int sum;

    public int sumIt(int[] nums)
    {
        lock (this)
        { //блокировка всего метода
            sum = 0; //начальное значение суммы

            for (int i = 0; i < nums.Length; i++)
            {
                sum += nums[i];
                Console.WriteLine("Промежуточная сумма для потока " +
                    Thread.CurrentThread.Name + " равна " + sum);
                Thread.Sleep(10); //Разрешено переключение задач
            }
            return sum;
        }
    }
}
class MyThread
{
    public Thread thrd;
    int[] a;
    int answer;
    /* Создаем один экземпляр класса SumArray для всех 
     экземпляров класса MyThread */
    static SumArray sa = new SumArray();
    //Создаем новый поток с помощью конструктора класса MyThread
    public MyThread(string name, int[] nums)
    {
        a = nums;
        thrd = new Thread(new ThreadStart(this.run));
        thrd.Name = name;
        thrd.Start(); //запускаем поток на выполнение
    }
    //метод который будет выполняться при запуске потока
    void run()
    {
        Console.WriteLine(thrd.Name + " стартовал");
        answer = sa.sumIt(a);
        Console.WriteLine("Сумма для потока " + thrd.Name + " равна " + answer);
        Console.WriteLine(thrd.Name + " завершен");
    }
}
class Sync
{
    public static void Main()
    {
        
        int[] a = { 1, 2, 3, 4, 5 };
        MyThread mt1 = new MyThread("Потомок №1", a);
        MyThread mt2 = new MyThread("Потомок №2", a); 
        mt1.thrd.Join();
        mt2.thrd.Join();
       
    Console.ReadKey();
    }
}
Задание: изменить приоритет первого потока установив значение ThreadPriority.Highest, а второго ThreadPriority.Lowest

Код:

// Запуск нового процесса
using System;
using System.Diagnostics;
class StartProcess
{
    public static void Main()
    {
        Process newProc = Process.Start("calc.exe");
        Console.WriteLine("Новый процесс стартовал");
        newProc.WaitForExit();
        newProc.Close(); //Освобождаем ресурсы системы
        Console.WriteLine("Новый процесс завершился");
    }
}
Задание:запустить calc.exe как фоновый процесс.
andresan вне форума Ответить с цитированием
Старый 15.05.2012, 00:37   #2
andresan
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 33
По умолчанию

Код:
// Использование метода Abort(object)
using System;
using System.Threading;
class MyThread
{
    public Thread thrd;

    public MyThread(string name)
    {
        thrd = new Thread(new ThreadStart(this.run));
        thrd.Name = name;
        thrd.Start();
    }
    // Это входная точка для потока
    void run()
    {
        Console.WriteLine(thrd.Name + " стартовал.");
        for (int i = 1; i <= 1000; i++)
        {
            try
            {
                Console.Write(i + "  ");
                if ((i % 10) == 0)
                {
                    Console.WriteLine();
                    Thread.Sleep(250);
                }
            }
            catch (ThreadAbortException exc)
            {
                if ((int)exc.ExceptionState == 0)
                {
                    Console.WriteLine(
                        "Прерывание отменено! Код завершения = " + exc.ExceptionState);
                    Thread.ResetAbort();
                }
                else
                    Console.WriteLine(
                        "Выполнение потока прервано, код завершения = "
                        + exc.ExceptionState);
            }
        }
        Console.WriteLine(thrd.Name + " завершился нормально");
    }
}
class ResetAbort{
    public static void Main() {
        MyThread mt1 = new MyThread ("Мой поток");

        Thread.Sleep (1000); // Разрешаем стартовать
                             // дочернему потоку
        Console.WriteLine("Прерывание выполнения потока");
        mt1.thrd.Abort(0); //Это не остановит выполнение потока
        Thread.Sleep(1000);
        Console.WriteLine("Прерывание выполнения потока");
        mt1.thrd.Abort(100);
        mt1.thrd.Join (); // Ожидаем завершения выполнения потока

        Console.WriteLine ("Основной поток завершен");
        Console.ReadKey();
    }
}
Задание:необходимо предусмотреть ввод пользователем с клавиатуры кода завершения потока (число от 1 до 100) – это организовать в отдельном потоке, в то время как в другом потоке должны происходить вычисления
andresan вне форума Ответить с цитированием
Старый 15.05.2012, 09:30   #3
Jaguar83
Профессионал
Пользователь
 
Аватар для Jaguar83
 
Регистрация: 25.05.2011
Сообщений: 91
По умолчанию

Стучите, обсудим.
ICQ 469670699
shalexei@yandex.ru
Помог? Будь человеком - жми на весы слева!
Jaguar83 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заплачу за задачу Monomah Фриланс 6 02.03.2011 12:25
заплачу за лабу! Андрей-Ymka Фриланс 3 17.12.2008 10:29
хорошо заплачу danwu09 Фриланс 3 05.12.2008 11:28