Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / копирование файлов в отдельном потоке (thread) / 22 сообщений из 22, страница 1 из 1
08.05.2014, 01:55
    #38636116
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Помогите пож-та!
Есть код параллельного копирования файлов, а нужно его переделать для WinForms (Windows Forms)
Кучу инфы перечитала,но сама я в жизни это не сделаю!(((( буду очень признательна за помощь....
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        public class FileCopier
        {
            private string fromPath;
            private string toPath;
 
            public FileCopier(string fromPath, string toPath)
            {
                this.fromPath = fromPath;
                this.toPath = toPath;
            }
 
            public void Copy()
            {
        
                File.Copy(fromPath, toPath);
            }
        }
        static void Main(string[] args)
        {
         
        FileCopier copier1 = new FileCopier("D:\\1.txt", "D:\\2.txt");
        FileCopier copier2 = new FileCopier("D:\\3.txt", "D:\\4.txt");
        Thread t1 = new Thread(copier1.Copy);
        Thread t2 = new Thread(copier2.Copy);
        t1.Start();
        t2.Start();
        t1.Join();
        t2.Join();
 
        }
    }
}




а вот шаблон для ВинФормс:


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public delegate void testDelegate();
 
        Thread t;
        ThreadStart ts;
 
        public Form1()
        {
            InitializeComponent();
            ts = new ThreadStart(ThreadProcess);
            t = new Thread(ts);
            t.Start();
        }
 
        private void ThreadProcess()
        {
            if (label1.InvokeRequired)
            {
                //this is not main thread
                label1.BeginInvoke(new testDelegate(ThreadProcess));
            }
            else
            {
                label1.Text = "started with thread";
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
    }
}
...
Рейтинг: 0 / 0
08.05.2014, 02:28
    #38636119
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
vvv111,
Код: c#
1.
2.
3.
4.
5.
6.
private readonly Action<string, string> _coryFileAction = (@from, to) => File.Copy(from, to);
        private void button1_Click(object sender, EventArgs e)
        {
            _coryFileAction.BeginInvoke("D:\\1.txt", "D:\\2.txt", ar => label1.Invoke(new MethodInvoker(() => label1.Text ="Copy:"+ ar.AsyncState)), "1");
            _coryFileAction.BeginInvoke("D:\\3.txt", "D:\\4.txt", ar => label1.Invoke(new MethodInvoker(() => label2.Text ="Copy:"+ ar.AsyncState)), "2");
        }
...
Рейтинг: 0 / 0
08.05.2014, 12:09
    #38636546
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Где-то в степи,
Если фалов много и большие, такое параллельное копирование напрочь подвесит систему.
Копировать надо в отдельном потоке, но последовательно.
...
Рейтинг: 0 / 0
08.05.2014, 12:13
    #38636549
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
ЕвгенийВ, да мне пох.., сделай последовательно в отдельном потоке..
...
Рейтинг: 0 / 0
08.05.2014, 13:39
    #38636750
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Где-то в степи,
то что нужно!!!!
вы единственный, кто мне помог!
Не знаю даже как отблагодарить!СПАСИБО БОЛЬШУЩЕЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
просите,что хотите =)
...
Рейтинг: 0 / 0
08.05.2014, 14:37
    #38636844
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Где-то в степи,

но это,я так понимаю, не многопоточное копирование?
...
Рейтинг: 0 / 0
08.05.2014, 14:40
    #38636853
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
vvv111,
delegate.BeginInvoke запускает выполнение в отдельном потоке.
...
Рейтинг: 0 / 0
08.05.2014, 15:29
    #38636939
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
08.05.2014 2:55, vvv111 пишет:

> Есть код параллельного копирования файлов, а нужно его переделать

Одновременное копирование файлов - это самый большой звездец, какой
только можно придумать...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.05.2014, 15:31
    #38636941
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
ЕвгенийВ,

спасибо! значит в том коде слово deligate.BeginInvoke заменнено на _coryFileAction.BeginInvoke?
...
Рейтинг: 0 / 0
08.05.2014, 15:34
    #38636947
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
ЕвгенийВ, а вот в этом коде тоже выполняется копирование файлов. Но как указать откуда и куда копировать. Я вижу, что используются переменные s1 и s2 для этого,но в них что-то другое записано...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
namespace PBarAndProc
{
    public partial class Form1 : Form
    {
        delegate void Copy();
        delegate void ToBrogressBar(string s1, string s2);
        ToBrogressBar ToBarFunc;

        public Form1()
        {
            InitializeComponent();
            ToBarFunc = new ToBrogressBar(ToPBar);
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            Copy cpy = new Copy(CopyMy);
            IAsyncResult res = cpy.BeginInvoke(new AsyncCallback(CallBack), null);
        }

        void CallBack(IAsyncResult r)
        {
            label1.Text = "Готово!";
            this.BackColor = Color.Red;
            //this.Close();
        }

        void ToPBar(string s1, string s2)
        {
            progressBar1.Value++;
            label1.Text = s1 + " -> " + s2;
        }

        void CopyMy()
        {            
            int n = 100;
            for (int i = 0; i < n; i++)
            {                
                Thread.Sleep(5);    // Copy...
                progressBar1.Invoke(ToBarFunc, new object[] { (i + 1).ToString(), (n).ToString() });
            }
        }
    }
}
...
Рейтинг: 0 / 0
08.05.2014, 15:39
    #38636953
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Заранее спасибо всем за ответы!как хорошо, что в России есть такие умные люди!
(я тоже стараюсь помогать только младшим))))))
...
Рейтинг: 0 / 0
08.05.2014, 15:57
    #38636976
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
vvv111ЕвгенийВ, а вот в этом коде тоже выполняется копирование файлов. Но как указать откуда и куда копировать. Я вижу, что используются переменные s1 и s2 для этого,но в них что-то другое записано...

В этом коде симулируется долгое действие и прогрессбар просто показывает какая часть работы выполнена.
...
Рейтинг: 0 / 0
13.05.2014, 13:54
    #38639766
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
ЕвгенийВ,

а вы не поможете еще в одной программульке?У меня есть код параллельного перемножения матриц в MPI, то используется очень много процессоров = колву столбцов +1 . А надо как-то умудриться сделать,чтоб процессов было меньше (например 4 процесса на матрицу размерностью 1000*1000).
(приложила файл)
...
Рейтинг: 0 / 0
13.05.2014, 14:05
    #38639784
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
vvv111,
А что такое MPI?
...
Рейтинг: 0 / 0
13.05.2014, 15:23
    #38639892
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Я не знаю как объяснить, т.к. сама в этом не очень разбираюсь. В MPI- происходит передача сообщений между процессорами.
...
Рейтинг: 0 / 0
13.05.2014, 18:07
    #38640143
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Где-то в степи,
Пользуясь тем, что вы мне так сильно помогли, прошу помощи еще раз!..
не откажете доработать программу в MPI ?
...
Рейтинг: 0 / 0
13.05.2014, 18:46
    #38640190
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
vvv111,

http://www.osl.iu.edu/research/mpi.net/ - ну вот например библиотека для MPI...
...
Рейтинг: 0 / 0
13.05.2014, 19:35
    #38640232
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
vvv111,
ну вы что думает я кудесник?
с библиотекой mpi.net не работал, и разворачиватьsdk не хочу, и ssd поджимает ( отмазка)
давайте исходить из того
1 вы считаете что ваш алгоритм правильный? тое сть множит верно
в сети в англ. секторе примеров навалом типа этого http://sergiu.calancea.net/?p=110
2 управление ветвлением имхо должно задаваться декларативно через комуникаторы, равно как и результаты работы
между потоками ( тут как бы поток слово не сильно уместно)
у вас же стоит в самом начале Communicator.world и все, это типа давай дави сколько можешь.., вот он и давит ))
Может лучше разобраться более детально с этой либой, ведь акцент задания - использование mpi...
...
Рейтинг: 0 / 0
13.05.2014, 20:00
    #38640247
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
all я чет ничего не понимаю ((
http://izvestia.ru/news/570457
...
Рейтинг: 0 / 0
13.05.2014, 21:35
    #38640286
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Где-то в степи, (прилагаю код еще раз)

1. Да код умножает верно,но число процессов желательно уменьшить!
2. Спасибо вам за ссылку, щас буду изучать англоязычные сайты)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MPI;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (new MPI.Environment(ref args))
            {
                Intracommunicator comm = Communicator.world;
                int rank = comm.Rank;
                int size = comm.Size;
                //double[,] A = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
                //double[,] B = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
                double[,] A = SchitIzFaila("a.txt");
                double[,] B = SchitIzFaila("b.txt");
                int razmer = A.GetLength(0);
                double[,] C = new double[razmer, razmer];
                double[] tempMatrix = new double [size];
                if (rank == 0)
                {
                    Console.WriteLine("Matrica A");
                    vyvodvconsol(A);
                    Console.WriteLine("Matrica B");
                    vyvodvconsol(B);
                }
                if (rank == 0)
                {
                    int IndexRank = 1;
                    for (int i = 0; i < razmer; i++)
                    {
                        for (int j = 0; j < razmer; j++)
                        {
                          
                            {
                                int[] koordinata = new int[2] { i, j };
                                comm.Send(koordinata, IndexRank, 0);
                                IndexRank++;
                               // comm.Wait();
                            }
                           

                        }
                    }
                    comm.Gather(-1, 0, ref tempMatrix);
                    comm.Barrier();
                    C = PoluchMatricuIzPosledovat(tempMatrix, razmer);
                    Console.WriteLine("Matr C");
                    vyvodvconsol(C);
                }
                else
                {
                   
                   
                        int[] koordinata = new int[2];
                        comm.Receive(0, 0, ref koordinata);

                        double resultat = Element(PoluchitStroku(koordinata[0], A), PoluchitStolbec(koordinata[1], B));
                        comm.Gather(resultat, 0, ref tempMatrix);
                        comm.Barrier();

                   
                    
                }
            }

        }
        public static double[,] SchitIzFaila(string adress)
        {
            StreamReader sr = new StreamReader(adress);
            int columns = 0;
            int lines = 0;
            while (!sr.EndOfStream)
            {
                string temp = sr.ReadLine();
                columns = temp.Split(' ').Count();
                lines++;
            }
            double[,] result = new double[lines, columns];
            sr = new StreamReader(adress);
            for (int i = 0; i < result.GetLength(0); i++)
            {
                string[] temp = sr.ReadLine().Split(' ');
                for (int j = 0; j < result.GetLength(1); j++)
                {
                    result[i, j] = Convert.ToDouble(temp[j]);
                }
            }
                return result;
            
        }
                
        public static void vyvodvconsol(double[,] matrix)
        {
            Console.WriteLine();
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    Console.Write(matrix[i, j]);
                    Console.Write(" ");
                }
                Console.Write('\n');
            }
            Console.WriteLine();
        }
        public static double[] PoluchitStroku(int idLine, double[,] M)
        {
            double[] result = new double[M.GetLength(1)];
            for (int i = 0; i < result.Length; i++)
            {
                result[i] = M[idLine, i];
            }
            return result;
        }
        public static double[] PoluchitStolbec(int idColumn, double[,] M)
        {
            double[] result = new double[M.GetLength(0)];
            for (int i = 0; i < result.Length; i++)
            {
                result[i] = M[i,idColumn];
            }
            return result;
        }
        public static double Element(double[] line, double[] column)
        {
            double result = 0;
            for (int i = 0; i < line.Length; i++)
            {
                result += line[i] * column[i];
            }
            return result;
        }
        public static double[,] PoluchMatricuIzPosledovat(double[] matrix, int size)
        {
            double[,] resmatrix = new double[size, size];
            int matrixIndex = 1;
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    resmatrix[i, j] = matrix[matrixIndex];
                    matrixIndex++;
                }
            }
            return resmatrix;
        }
    }
}
...
Рейтинг: 0 / 0
13.05.2014, 21:37
    #38640288
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Где-то в степи, что насчет НДС? для простых пользователей ничего не изменится..
...
Рейтинг: 0 / 0
13.05.2014, 22:29
    #38640339
vvv111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
копирование файлов в отдельном потоке (thread)
Где-то в степи, прога по вашей ссылке ТО ЧТО НАДО!!!ДАЖЕ не знаю что бы я без вас делала!!!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / копирование файлов в отдельном потоке (thread) / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]