Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Два потока - одна переменная 
:(
    Опции темы
sobik
Дата 6.5.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 21.3.2008
Где: Киев, Украина.

Репутация: 1
Всего: 1



Привет всем. У меня такая запарка - есть форма на которую вводиться два числа. Потом нажимаеться старт и запускаеться поток, который сумирует числа от меньшего введеного числа до большего. В то же время другой поток посылает месседжбоксы с процентом выполненого задания:
Короче, вот код:
Код

class MyThread
{
        int m_high;
        int m_low;
        int m_delay;
        int m_sum = 0;
        int m_curindex = 0;

public MyThread(int low, int high, int delay)
        {
            m_high = high;
            m_low = low;
            m_delay = delay;
            m_message = "Start";
            Thread bgThrd = new Thread(new ThreadStart(this.run));
            Thread Thrd = new Thread(new ThreadStart(this.showstatus));
            bgThrd.Name = "Background";
            bgThrd.IsBackground = true;
            Thrd.Start();
            bgThrd.Start();                    
        }

        public void run()
        {
           
            for (int i = m_low; i <= m_high; i++)
            {
                lock (this)
                {
                    m_sum += i;
                    m_curindex += 1;
                }
                Thread.Sleep(m_delay);

            }
            MessageBox.Show("Background thread ended. Sum = " + m_sum.ToString(), "Message from background thread");
            
        }

        public void showstatus()
        {
            double currentprocent = 0;                 
            for (int i = m_low; i <= m_high; i++)
            {
                lock (this)
                {
                    currentprocent = m_curindex / (m_high - m_low)*100;
                    MessageBox.Show("Current status of background thread :" + currentprocent.ToString() + " %");
                }
                Thread.Sleep(m_delay);
            }
        }
}


Проблема в том, что переменная m_curindex в потоке Thrd имеет либо начальное(нулевое значение), либо значение m_high - m_low. Может подскажете, в чем моя ошибка?
PM MAIL   Вверх
Jk_
Дата 6.5.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.11.2007

Репутация: нет
Всего: нет



Похоже все дело в операции деления. Переменная m_curindex изменяется как положено, но она имеет тип int и при делении также на int  /*m_high - m_low*/ получается int smile  (округляется до нуля).

решение может быть таким:

 
Код

currentprocent = (double)m_curindex / (m_high - m_low) * 100;


Это сообщение отредактировал(а) Jk_ - 6.5.2008, 21:17
PM MAIL   Вверх
sobik
Дата 8.5.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 21.3.2008
Где: Киев, Украина.

Репутация: 1
Всего: 1



Пасибки,Jk_,я просто завтыкал))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.