Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа / 23 сообщений из 23, страница 1 из 1
24.04.2013, 07:26
    #38237539
Avolno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Вообщем обнаружилась такая проблема: есть приложение на С#, FW 4.0. При старте создается несколько потоков, после чего они приостанавливаются (...WaitOne(). По событию они должны проснуться... и тут начинается "непонятное". Если проект запущен из студии (с перекомпиляцией), то все работает отлично, потоки просыпаются. Но если сразу после этого запустить приложение просто через *.exe файл (Bin/Debag) , то один из потоков наотрез отказывается просыпаться. Такая "фигня" происходит на 3х ПК из 5ти. Если перезагрузить ПК, то приложение при первом запуске (речь о запуске через *.exe файл) отрабатывает нормально, а при последующих опять не просыпается один поток. FW переустанавливал, студию тоже... не знаю в чем может быть проблема. Рад буду выслушать ваши мнения и советы.
...
Рейтинг: 0 / 0
24.04.2013, 08:18
    #38237557
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Ошибки в коде являются наиболее вероятной причиной
...
Рейтинг: 0 / 0
24.04.2013, 08:28
    #38237560
Avolno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Так ведь дело в том что при запуске проекта из студии -все отлично работает, а при запуске из Bin/Debag проблема с потоком.
...
Рейтинг: 0 / 0
24.04.2013, 08:52
    #38237573
Avolno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
схематично код выглядит как то так
При запуске:
создаем потоки

класс 1:
private AutoResetEvent _autoEvent;
....
в конструкторе класс 1
_autoEvent=new AutoResetEvent(false);


класс 2
private AutoResetEvent _autoEvent;
...
в конструкторе класс 2
_autoEvent=new AutoResetEvent(false);

затем потоки приостанавливаются
_autoEvent.Reset();
_autoEvent.WaitOne();

при появлении события (а конкретнее, в очереди появляется объект для записи в БД)

будим потоки

сперва в классе 1
_autoEvent.Set();

затем в классе 2
_autoEvent.Set();
...
Рейтинг: 0 / 0
24.04.2013, 09:13
    #38237584
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
MSDN говорит следующее Нет никакой гарантии, что каждый вызов метода Set освободит поток. Если два вызова находятся настолько близко, что второй вызов происходит до освобождения потока, тогда освобождается только один поток. Это как, если бы второй вызов не произошел. Также, если Set вызывается, когда нет ожидающих потоков и AutoResetEvent получает сигналы, сигнал никакого влияния ни на что не оказывает.
...
Рейтинг: 0 / 0
24.04.2013, 09:47
    #38237616
Avolno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
да, натыкался на это...
но это выглядело бы правдоподобно если бы:
1. то работало то не работало - а тут на 1 ПК никогда не работает, на другом Всегда работает.
2. если бы приложение вело себя одинаково при запуске через студию и при запуске через *exe файл
...
Рейтинг: 0 / 0
24.04.2013, 09:51
    #38237626
WPF
WPF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Советую вам собрать простенькое приложение с подобной схемой потоков
...
Рейтинг: 0 / 0
24.04.2013, 10:07
    #38237650
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Avolno1. то работало то не работало - а тут на 1 ПК никогда не работает, на другом Всегда работает.
2. если бы приложение вело себя одинаково при запуске через студию и при запуске через *exe файл
как раз в этом ничего удивительного.
...
Рейтинг: 0 / 0
24.04.2013, 10:22
    #38237664
WPF
WPF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Исходите из того, что какой-то поток занимает процессор, потому что AutoResetEvent строит строгую очередь из потоков. Кроме того, если ни один поток не ожидает своей очереди, тогда вызов Set() бесполезен, прибывший поток будет ждать своего, нового, вызова.
...
Рейтинг: 0 / 0
24.04.2013, 10:58
    #38237730
WPF
WPF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Вы в коде вызываете Reset(). Reset() удаляет всю очередь, то есть потоки завершают работу и возвращаются обратно в пул, если таковой используете. Если же вы ждете события неопределенное время, тогда есть смысл вернуть потоки в пул, а затем позвать их обратно, а не продолжать работу с демонами. Если же вы ожидаете объект для работы с БД, тут вообще нужно абстрагироваться от логики приложения, используйте делегаты Action, Func, они для этого и придуманы. А тянуть поток через всю логику и прерывать его на каждый чих неразумно.
...
Рейтинг: 0 / 0
24.04.2013, 11:02
    #38237737
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
схема ваша не очень ясна. поток 1 ждет event1 - далее где находится evnet2? И кто его вызывает?
...
Рейтинг: 0 / 0
24.04.2013, 11:08
    #38237749
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Avolno,
Код выложи.
...
Рейтинг: 0 / 0
24.04.2013, 11:22
    #38237782
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
WPF,

пчоему? у меня была такая система. Поток 1 читал что-то из БД через некий интервал а затем клал в очередь и будил Поток2 и тд. Ни разу проблем с event-ами не наблюдал.
...
Рейтинг: 0 / 0
24.04.2013, 11:25
    #38237791
Avolno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
WPFВы в коде вызываете Reset(). Reset() удаляет всю очередь, то есть потоки завершают работу и возвращаются обратно в пул, если таковой используете. Если же вы ждете события неопределенное время, тогда есть смысл вернуть потоки в пул, а затем позвать их обратно, а не продолжать работу с демонами. Если же вы ожидаете объект для работы с БД, тут вообще нужно абстрагироваться от логики приложения, используйте делегаты Action, Func, они для этого и придуманы. А тянуть поток через всю логику и прерывать его на каждый чих неразумно.

но разве это может объяснить разницу в работе через студию и через ехе файл
...
Рейтинг: 0 / 0
24.04.2013, 11:33
    #38237817
WPF
WPF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Почему нельзя тянуть через все приложение, я так понял ваш вопрос? Зависит от многих факторов, по моему мнению, лучшее применение потоков – выполнение конкретной задачи. Этот вывод сделан на собственном опыте, документами из MSDN подкрепить не могу. Что происходит в противном случае, увеличивается вероятность ошибок, в том числе и ОС, ведь работая с потоками, вы работаете через Win API. Поэтому мое мнение однозначно укрепилось, что для работы с БД, нужны короткие как выстрел инструкции, что и обеспечивается надежно вышеупомянутыми делегатами. Все остальное имеет более низкую степень надежности. ИМХО
...
Рейтинг: 0 / 0
24.04.2013, 11:36
    #38237828
WPF
WPF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Avolnoно разве это может объяснить разницу в работе через студию и через ехе файл
Зачем вам искать ответ на вопрос, который не имеет никакого значения для работы приложения. Если интересно, почитайте, как устроена студия, вопросы исчезнут.
Далее, когда работаете с потоками, все, что вы делаете, все должно иметь четкую логику. Возьмите бумагу и напишите, как и когда все будет работать, лучший способ избежать коллизий. Чудес не бывает.
...
Рейтинг: 0 / 0
24.04.2013, 11:50
    #38237870
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Avolnoда, натыкался на это...
но это выглядело бы правдоподобно если бы:
1. то работало то не работало - а тут на 1 ПК никогда не работает, на другом Всегда работает.
2. если бы приложение вело себя одинаково при запуске через студию и при запуске через *exe файл
Вы написали некорректный многопоточный код, вам просто везёт на одном из компов.

PS. При работе с мнопогопоточностью надо помнить определение безумия по Эйнштейну:
«Безумие - это проделывать то же самое снова и снова, каждый раз ожидая иного результата».
...
Рейтинг: 0 / 0
24.04.2013, 11:51
    #38237872
mikola1982
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
WPFПочему нельзя тянуть через все приложение, я так понял ваш вопрос? Зависит от многих факторов, по моему мнению, лучшее применение потоков – выполнение конкретной задачи. Этот вывод сделан на собственном опыте, документами из MSDN подкрепить не могу. Что происходит в противном случае, увеличивается вероятность ошибок, в том числе и ОС, ведь работая с потоками, вы работаете через Win API. Поэтому мое мнение однозначно укрепилось, что для работы с БД, нужны короткие как выстрел инструкции, что и обеспечивается надежно вышеупомянутыми делегатами. Все остальное имеет более низкую степень надежности. ИМХО

вы имеет ввиду асинхронные операции (Begin.... End....)?
...
Рейтинг: 0 / 0
24.04.2013, 11:57
    #38237889
WPF
WPF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
mikola1982вы имеет ввиду асинхронные операции (Begin.... End....)?Разумеется, смысл на синглтоне использовать делегаты. Begin.... End.... это конечно более низкий уровень, вам же надо высунуть паблик методы наружу.
...
Рейтинг: 0 / 0
24.04.2013, 12:03
    #38237900
WPF
WPF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
Здесь под другим ником я привожу пример такого доступа
...
Рейтинг: 0 / 0
24.04.2013, 12:13
    #38237932
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
ТС, боюсь без кода мы вам не поможем...
ЗЫ так вы это для асинхрона используете?
...
Рейтинг: 0 / 0
24.04.2013, 13:17
    #38238086
Avolno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
тема закрыта, проблема решена. Ошибка в коде: не в том месте "взводился" разрешающий флажок для одного из потоков. А мистика в работе объяснялась быстродействие: на более медленных тачках, пока просыпался первый поток, "флажок для второго успевал взвестись.
...
Рейтинг: 0 / 0
24.04.2013, 13:19
    #38238093
Avolno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
всем спасибо за участие.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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