Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/68: Рейтинг темы: голосов - 68, средняя оценка - 4.69
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810

Приостановка/возобновление потока

11.09.2013, 17:48. Показов 13979. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, гуру многопоточного программирования!

Помогите, пожалуйста, разобраться с приостановкой, возобновлением.
Суть такова, есть программа (WinForms), которая действует подобно службе с кнопками Start и Stop. Кнопки, как вы уже догадались, приостанавливают и запускают поток, который выполняет всякие хорошие действия. Раньше я пользовался методами Thread.Suspend() и Threat.Resume() однако майкрософт ругается на то, что эти методы морально устарели, несинхронизированы и вообще непонятно какой код будет выполняться после внезапного Suspend(). Посоветуйте, как вы решали подобные задачи, а то курение мануалов про примитивы синхронизации особо не помогло, желательно пример.
Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2013, 17:48
Ответы с готовыми решениями:

Приостановка потока
требуется по нажатию кнопки поставить поток на паузу, при нажатии другой, возобновить. методы MainThread.Suspend() и MainThread.Resume()...

Приостановка потока до выполнения какого либо события
Пишу клиент - серверное приложение где в методе для продолжение работы нужно дождаться ответа от клиента, он получается в других потоках. ...

Приостановка работы
Здравствуйте!Ситуация такова: В программе выполняется функция.Во время её работы пользователю нужно вводить новые данные (для этого...

6
 Аватар для VladislavTepes
80 / 80 / 14
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
11.09.2013, 19:45
pizurok, используйте ManualResetEvent:
C#
1
2
3
4
5
6
7
8
Thread thr=new Thread(delegate() { while(true) Console.WriteLine("Hi");} );
ManualResetEvent me = new ManualResetEvent(true);
//Thread start
thr.Start(mn);
//Thread suspend
me.Reset();
//Thread resume
me.Reset();
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
11.09.2013, 20:14
VladislavTepes, что это за бред Вы в написали? У Вас этот код даже не запустится. Не говоря про то что он будет правильно работать.

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
        private static void Main()
        {
            Thread thr = new Thread(Method);
            ManualResetEvent me = new ManualResetEvent(true);
 
            thr.Start(me);
            Thread.Sleep(2000);
 
            Console.WriteLine("Pause");
            me.Reset();
 
            Thread.Sleep(2000);
 
            Console.WriteLine("Run");
            me.Set();
 
            Thread.Sleep(300);
 
            me.Reset();
        }
 
        private static void Method(object state)
        {
            ManualResetEvent MRE = (ManualResetEvent)state;
 
            while (true)
            {
                MRE.WaitOne();
                Thread.Sleep(100);
                Console.WriteLine("Test");
            }
        }
1
 Аватар для VladislavTepes
80 / 80 / 14
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
11.09.2013, 20:26
Черт, действительно херь написал. Sorry.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.09.2013, 23:17
Anklav, вопрос: а что, если мы не можем внутри потока проверять стерт? То есть у нас есть какая-то длительная операция, и мы должны ее приостанавливать. Ну например очень долгая библиотечная функция, от которой нет исходников.
0
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
12.09.2013, 15:26  [ТС]
Цитата Сообщение от Anklav Посмотреть сообщение
VladislavTepes, что это за бред Вы в написали? У Вас этот код даже не запустится. Не говоря про то что он будет правильно работать.

Кликните здесь для просмотра всего текста
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
        private static void Main()
        {
            Thread thr = new Thread(Method);
            ManualResetEvent me = new ManualResetEvent(true);
 
            thr.Start(me);
            Thread.Sleep(2000);
 
            Console.WriteLine("Pause");
            me.Reset();
 
            Thread.Sleep(2000);
 
            Console.WriteLine("Run");
            me.Set();
 
            Thread.Sleep(300);
 
            me.Reset();
        }
 
        private static void Method(object state)
        {
            ManualResetEvent MRE = (ManualResetEvent)state;
 
            while (true)
            {
                MRE.WaitOne();
                Thread.Sleep(100);
                Console.WriteLine("Test");
            }
        }
Хорошо, а как же тогда завершить поток? То есть фактически в этой программе завершается главный поток, а тот все продолжает ждать и программа виснет.

Добавлено через 5 часов 32 минуты
Думаю надо сделать
C#
1
2
me.Close();
thr.Abort();
Тогда поток по идее должен освободить ресурсы и нормально завершиться, всем спасибо
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
12.09.2013, 20:45
Psilon, замены методам Suspend и Resume (без вмешательства в код потока) не знаю.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2013, 20:45
Помогаю со студенческими работами здесь

Приостановка потоков
Здравствуйте, помогите, пожалуйста, разобраться с заданием. Создать 2 потока: поток 1 выполняет вычитание и поток 2 выполняет деление....

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

Отлов окна, и приостановка его
Ребят как сделать чтобы программа отлавливала программы по handle или еще как нибудь. И чтобы запрещала его запуск пока не введешь...

Временная приостановка работы ASP-приложения в браузере
Приветствую! Сорри, если не в тему. Скажем, есть некий .aspx файл - это тест, загружаемый в браузере, который необходимо пройти за...

Возобновление работы закрытого окна
Суть проблемы такова: есть окно, содержащее в себе какую-то информацию, необходимо реализовать возможность его закрытия с возможностью...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru