powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
23 сообщений из 23, страница 1 из 1
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237539
Avolno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем обнаружилась такая проблема: есть приложение на С#, FW 4.0. При старте создается несколько потоков, после чего они приостанавливаются (...WaitOne(). По событию они должны проснуться... и тут начинается "непонятное". Если проект запущен из студии (с перекомпиляцией), то все работает отлично, потоки просыпаются. Но если сразу после этого запустить приложение просто через *.exe файл (Bin/Debag) , то один из потоков наотрез отказывается просыпаться. Такая "фигня" происходит на 3х ПК из 5ти. Если перезагрузить ПК, то приложение при первом запуске (речь о запуске через *.exe файл) отрабатывает нормально, а при последующих опять не просыпается один поток. FW переустанавливал, студию тоже... не знаю в чем может быть проблема. Рад буду выслушать ваши мнения и советы.
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237557
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибки в коде являются наиболее вероятной причиной
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237560
Avolno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ведь дело в том что при запуске проекта из студии -все отлично работает, а при запуске из Bin/Debag проблема с потоком.
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #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
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237584
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDN говорит следующее Нет никакой гарантии, что каждый вызов метода Set освободит поток. Если два вызова находятся настолько близко, что второй вызов происходит до освобождения потока, тогда освобождается только один поток. Это как, если бы второй вызов не произошел. Также, если Set вызывается, когда нет ожидающих потоков и AutoResetEvent получает сигналы, сигнал никакого влияния ни на что не оказывает.
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237616
Avolno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, натыкался на это...
но это выглядело бы правдоподобно если бы:
1. то работало то не работало - а тут на 1 ПК никогда не работает, на другом Всегда работает.
2. если бы приложение вело себя одинаково при запуске через студию и при запуске через *exe файл
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237626
WPF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Советую вам собрать простенькое приложение с подобной схемой потоков
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237650
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avolno1. то работало то не работало - а тут на 1 ПК никогда не работает, на другом Всегда работает.
2. если бы приложение вело себя одинаково при запуске через студию и при запуске через *exe файл
как раз в этом ничего удивительного.
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237664
WPF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходите из того, что какой-то поток занимает процессор, потому что AutoResetEvent строит строгую очередь из потоков. Кроме того, если ни один поток не ожидает своей очереди, тогда вызов Set() бесполезен, прибывший поток будет ждать своего, нового, вызова.
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237730
WPF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы в коде вызываете Reset(). Reset() удаляет всю очередь, то есть потоки завершают работу и возвращаются обратно в пул, если таковой используете. Если же вы ждете события неопределенное время, тогда есть смысл вернуть потоки в пул, а затем позвать их обратно, а не продолжать работу с демонами. Если же вы ожидаете объект для работы с БД, тут вообще нужно абстрагироваться от логики приложения, используйте делегаты Action, Func, они для этого и придуманы. А тянуть поток через всю логику и прерывать его на каждый чих неразумно.
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237737
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
схема ваша не очень ясна. поток 1 ждет event1 - далее где находится evnet2? И кто его вызывает?
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237749
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avolno,
Код выложи.
...
Рейтинг: 0 / 0
Работа с потоками. На некоторых ПК один из потоков, в момент работы приложения, не просыпа
    #38237782
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF,

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

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

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

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


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