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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

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

Код:
//Использование инструкции 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, 08:06   #2
andresan
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 33
По умолчанию

СРОЧНО! ЗАПЛАЧУ!
andresan вне форума Ответить с цитированием
Старый 15.05.2012, 09:23   #3
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

это 2 разных задания ? или запустить потоки потом еще и фоновый calc запустить ? и на счет потов без разницы что в них выполняться будет ?
wm_leviathan вне форума Ответить с цитированием
Старый 15.05.2012, 10:10   #4
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

учитывая что конкретно задание не понятно (должны ли там потоки что то считать или без разницы что в них будет) сделал как есть
1) 2 потока
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication2
{
    public class ClassThread
    {
        public void MethodRunThread1()
        {
            int i;
            for (i = 0; i < 100; i++)
            {
                Console.WriteLine("Работает поток 1: " + i);
                Thread.Sleep(1000);
            }
        }

        public void MethodRunThread2()
        {
            int i;
            for (i = 0; i < 100; i++)
            {
                Console.WriteLine("                       Работает поток 2: " + i);
                Thread.Sleep(1000);
            }
            
        }
    }



    class Program
    {
        static void Main(string[] args)
        {
            ClassThread ClassThread = new ClassThread();
            Thread ThreadRunThread1 = new Thread(new ThreadStart(ClassThread.MethodRunThread1));
            ThreadRunThread1.Priority = ThreadPriority.Highest;
            ThreadRunThread1.Start();

            Thread ThreadRunThread2 = new Thread(new ThreadStart(ClassThread.MethodRunThread2));
            ThreadRunThread1.Priority = ThreadPriority.Lowest;
            ThreadRunThread2.Start();
            Console.ReadLine();//Для того чтобы показать что консолью можно пользоваться свободно и calc не мешает

        }
    }
}
2) фоновый calc
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication2
{
    public class ClassThread
    {
        public void MethodRunCalc()
        {

            Process newProc = Process.Start("calc.exe");
            Console.WriteLine("Новый процесс стартовал");
            newProc.WaitForExit();
            newProc.Close(); //Освобождаем ресурсы системы
            Console.WriteLine("Новый процесс завершился");

        }
    }
        


    class Program
    {
        static void Main(string[] args)
        {
            ClassThread ClassThread = new ClassThread();
            Thread ThreadRunCalc = new Thread(new ThreadStart(ClassThread.MethodRunCalc));
            ThreadRunCalc.Start();
            Console.ReadLine();//Для того чтобы показать что консолью можно пользоваться свободно и calc не мешает

        }
    }
}
wm_leviathan вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] Потоки Lemo C# (си шарп) 2 24.05.2011 21:50
Потоки. FieStik Общие вопросы C/C++ 4 23.05.2011 14:12
потоки sergei64_89 Помощь студентам 2 20.10.2010 02:08
потоки tanek Помощь студентам 6 15.03.2010 21:42
потоки Владимир1988 Помощь студентам 0 08.02.2010 23:12