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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2018, 04:11   #1
MACTEPwar
Пользователь
 
Регистрация: 11.12.2017
Сообщений: 15
По умолчанию Параллельные потоки

Цитата:
есть код пинга в классе:
Код:
public class Librarry
{
    private string name;
    private TextBox t1;
    private TextBox t2;
    public Librarry(string name, TextBox t1, TextBox t2)
	{
        this.name = name;
        this.t1 = t1;
        this.t2 = t2;
	}

public void pingPC()
    {
        string temp_str = name.Substring(name.LastIndexOf(@"\") + 1, name.Length - name.LastIndexOf(@"\") - 1);
        String[] substring = temp_str.Split('-');
        substring[0] = Convert.ToInt16(substring[0]).ToString();
        substring[1] = Convert.ToInt16(substring[1]).ToString();
        string[] result = new string[2];
        Ping pingSender = new Ping();
        if (Convert.ToInt16(substring[0]) > 255 || Convert.ToInt16(substring[1]) > 255)
        {
            substring[0] = "11";
            substring[1] = Interaction.InputBox("Введите адресс для 10.11." + substring[1] + ".10");
        }
        IPAddress address = IPAddress.Parse("10." + substring[0] + "." + substring[1] + ".10");
        PingReply reply = pingSender.Send(address);
        if (reply.Status == IPStatus.Success)
        {
            t1.Text += reply.Address.ToString() + Environment.NewLine;
        }
        else
        {
            t2.Text += address.ToString() + Environment.NewLine;
        }
    }
}
Цитата:
я создаю экземпляр класса в отдельном потоке:
Код:
int ii = 0;
private void button3_Click(object sender, EventArgs e)
{
	int cou = 0;
	while (cou < textBox1.Lines.Length)
	{
		ii++;
		Thread.Sleep(200);    
		new Thread(new Librarry(textBox1.Lines[cou], textBox2, textBox3).pingPC).Start();
		cou++;
	}
	MessageBox.Show("Все машины пропингованы.");
}
Цитата:
Но не все результаты показывает, хотя если добавить в функцию пинга MessageBox, то после проклацывания всех открывшихся MessageBox-ов пишет все результаты. В чем ошибка, в какой момент программа съедает результаты пинга? Буду очень благодарен.
MACTEPwar вне форума Ответить с цитированием
Старый 06.02.2018, 07:43   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
В чем ошибка
В том, что вы не синхронизируете доступ к общим переменным. Обычно про это пишут в книжка, когда доходят до темы потоков.
p51x вне форума Ответить с цитированием
Старый 06.02.2018, 07:53   #3
MACTEPwar
Пользователь
 
Регистрация: 11.12.2017
Сообщений: 15
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
В том, что вы не синхронизируете доступ к общим переменным. Обычно про это пишут в книжка, когда доходят до темы потоков.
Сколько кодом занимаюсь, никогда не использовал на практике многопоточность, только читал, но не помню на счет переменных. Спасибо, будет что изучить.
MACTEPwar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блок-схема. Параллельные потоки. Vanta11a Помощь студентам 0 01.06.2012 19:45
Задача на С++. Параллельные потоки narkoman_4ik Помощь студентам 3 23.02.2012 01:35
параллельные потоки Алма Помощь студентам 6 23.01.2011 22:09
Параллельные потоки посредством MPI J B. G Общие вопросы C/C++ 1 08.11.2010 22:08