Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
1

утечка потока

31.05.2014, 13:24. Просмотров 413. Ответов 1
Метки нет (Все метки)

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
    public class ClassThread
    {
        static public int counThread;
        public Thread thread;
        Population population;
 
 
        string name;
        public bool run;
        public void ThreadFunc()
        {
            population.stepNext();
            counThread--;
            run = false;
        }
        public void start()
        {
            run = true;
            thread = new Thread(new ThreadStart(ThreadFunc));
            thread.Name = name;
            if (thread.Name == null)
            {
                thread.Name = name;
 
            }
            thread.Start();
        }
        public ClassThread()
        {
 
        }
        public void setPopulation(ref Population population_, string name_)
        {
            name = name_;
            population = population_;
            run = false;
        }
        public bool getState()
        {
            if (thread == null)
                return true;
            else
                return false;
        }
 
    }
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
 for(int i = 0; i < countIteration; i++)
            {
                foreach (var j in populations)//заполнили общий
                    generalPopulation.add(j.individs);
                y[i] = generalPopulation.get_mid_fitness();
                
                foreach (var j in populations)// очистили популяции
                    j.clearIndivids();
                
                ClassThread.counThread = 0;
 
                for (int j = 0 ; j< countPopulation; j++)// разбили по островам
                {
                    populations[j].geIndivids(generalPopulation.getRandomindivids(sP));// получили рандомно особей
                    
                    while (ClassThread.counThread == countThread)// если нет свободных потоков то ждём
                    {
                        System.Threading.Thread.Sleep(1);
                    }
 
                    for (int t = 0; t < countThread; t++)//ищем свободный поток
                    {
                        if (populationThread[t].run == false)//если нашли
                        {
                            if (populationThread[t].thread != null)
                             if (populationThread[t].thread.ThreadState == System.Threading.ThreadState.Running)
                                populationThread[t].thread.Join();
                            ClassThread.counThread++;
                            populationThread[t].setPopulation(ref populations[j], "итерация " + (i+1) + "поток " + (t+1));
                            q.Add("итерация " + (i + 1) + "поток " + (t + 1));
                            populationThread[t].start();
                            break;
                        }
 
                    }
                }
 
                while (ClassThread.counThread != 0)//подождали все потоки
                {
                    System.Threading.Thread.Sleep(1);
                }
 
              
            
            }
иногда отладчик пишет что поток без имени завершился, как поймать этот поток ?

Добавлено через 1 минуту
возникает при countPopulation >= число потоков = число процессоров

Добавлено через 13 минут
решил с помощью аборта в lock но я думаю это не очень правильное решение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 13:24
Ответы с готовыми решениями:

Записать число в начало потока вернувшись с конца потока после записи нескольких элементов...
public static void Save(List&lt;SomeClass&gt; listSC, String fileName) { ...

Как из одного потока узнать состояние другого потока
Подскажите пожалуйста, как из одного потока узнать, что другой поток еще не...

Утечка памяти
Здравствуйте. В моей программе происходит утечка памяти. Ставлю наверное...

Утечка памяти
protected System.Collections.ArrayList ObjList; Объект добавляется в список...

Утечка памяти с generic
Есть программа, которая принимает данные(звук с звуковой карты) порциями по 200...

1
агерон
274 / 281 / 58
Регистрация: 12.10.2009
Сообщений: 1,108
03.06.2014, 07:25 2
ThreadPool
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 07:25

Утечка памяти в LibCurlNet
Доброго времени суток. Есть программа написана на с# для доступа к значениям...

Awesomium утечка памяти
При каждом выполнение этого участка кода увеличивается используемая память, не...

Утечка памяти, нужна помощь!
Здравствуйте! Имеется простейшая программа, написанная на С#. При запуске...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru