Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

Завершить метод раньше задержки

08.04.2019, 16:05. Показов 3787. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я хотел бы, чтобы если ответ пришел быстрее из _parent._serverClient.RestartCamera(); то продолжить работу дальше по методу, в этой части метода мы дожидаемся получения ответа от сервера которым занимается RestartCamera(), но ему может не всегда хватать 500мс, есть какой-то вариант условно поставить 5000 мс, но если он отработал за 100мс, не стал бы дожидаться конца и продолжил работу дальше?

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
object balanceLock = new object();
 
                lock (balanceLock)
                {
                    bool timeout = false;
 
                    while (true)
                    {
                        if (timeout)
                            throw new Exception("Нет ответа от сервера.");
 
                        CancellationTokenSource cts = new CancellationTokenSource();
                        var token = cts.Token;
 
                        //Task.Run(() =>
                        //{
                          _parent._serverClient.RestartCamera();
                          Thread.Sleep(500);
                          timeout = true;
                        //}, token);
 
                        if (cts != null && !cts.IsCancellationRequested)
                            cts.Cancel();
                        break;
                    }
                }
Может сделать туда флаг, который бы контролировал получение ответа в цикле, если правда, то выйти не дожидаясь задержки
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.04.2019, 16:05
Ответы с готовыми решениями:

Cs go противник видит меня раньше/задержки в стрельбе
Всем привет, суть проблемы такая, начинаю стрелять в противника и визуально видно что пули долетают, но примерно через 0,5сек после начала...

Как завершить выполнение процедуры раньше времени?
Внутри процедуры, при выполнении определенного условия нужно вывести сообщение и остановить выполнение процедуры. Как вывести сообщение я...

Завершить работу потоков раньше окончания метода main()
Здравствуйте! Мне необходимо, чтобы потоки завершили свою работу раньше окончания метода main(). Нашла для с# что-то: thread.join() -...

44
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
10.04.2019, 10:49  [ТС]
Студворк — интернет-сервис помощи студентам
Usaga,
Цитата Сообщение от Usaga Посмотреть сообщение
И почему Thread используется, который устарел лет восемь назад?
я взял пример с книги братьев Албахари справочник С# 7.0 (2018), думаю им виднее))

На счет ошибки, выводит System.ObjectDisposedException: Дескриптор SafeHandle был закрыт.
Убрал signal.Reset(); работает теперь только при отладки, без точек останова нет, надо блокировать потоки чувствую
0
Эксперт .NET
 Аватар для Usaga
14776 / 9550 / 1366
Регистрация: 21.01.2016
Сообщений: 36,010
10.04.2019, 11:00
Цитата Сообщение от ShmelVG Посмотреть сообщение
я взял пример с книги братьев Албахари справочник С# 7.0 (2018), думаю им виднее))
Это мог быть очень старый пример. Thread не рекомендует к использованию сама Microsoft. Task значительно богаче на возможности.

Цитата Сообщение от ShmelVG Посмотреть сообщение
надо блокировать потоки чувствую
Вам корректный пример с тасками ещё когда показали?
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
10.04.2019, 11:34  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Вам корректный пример с тасками ещё когда показали?
тот способ с WaitAny не подошел, нужно делать через этот способ
Цитата Сообщение от Usaga Посмотреть сообщение
Thread не рекомендует к использованию сама Microsoft.
Буду знать)

Добавлено через 6 минут
Usaga, Usaga, сделал так
C#
1
2
3
4
5
6
7
8
9
10
11
12
lock (balanceLock)
                {
                    var signal = new ManualResetEvent(false);
                    new Task(() =>
                    {
                        _parent._serverClient.ReceivedEcho -= GetMessageEcho;
                        _parent._serverClient.ReceivedEcho += GetMessageEcho;
                        signal.WaitOne();
                        signal.Dispose();
                    }).Start();
                    signal.Set(); 
                }
четко отрабатывает при отладки, но без точек останова, нет( В messageEcho не успевает приходить ответ от события, вы не знаете как можно исправить?
0
Эксперт .NET
 Аватар для Usaga
14776 / 9550 / 1366
Регистрация: 21.01.2016
Сообщений: 36,010
10.04.2019, 11:37
Цитата Сообщение от ShmelVG Посмотреть сообщение
тот способ с WaitAny не подошел, нужно делать через этот способ
Он самый корректный из того, что можно посоветовать с вашей постановкой вопроса. Ожидается либо завершение таски задержки, либо таски с вашей задачей.

Замечу, что в методе с камерой отсвечивала другая таска, которую уже никто не ожидает. Возьмите уже в руки отладчик и посмотрите поэтапно что у вас там делается.

Из всего озвученного, тот вариант был самым адекватным. А Thread.Sleep и ManualResetEvent - уже нескрываемо выглядят костылями.

Самым корректным было бы попросить архив с проектом и описание хотелки (но без вашего видения решения) и самому за вас сделать. Это будет в сто раз быстрее. Но я хз у кого желание на это найдётся.

А я от этой темы подустал. Безрезультативное перемалывание воды в ступе.

Добавлено через 41 секунду
Цитата Сообщение от ShmelVG Посмотреть сообщение
знаете как можно исправить?
Выше сказал. От темы отписываюсь.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
10.04.2019, 16:11  [ТС]
Usaga, ок, понимаю, спасибо что откликнулись на мою проблему)

Добавлено через 4 часа 31 минуту
Вот решение, оставлю тут на случай ядерной войны

C#
1
2
3
4
5
6
7
8
9
10
public void WaitForEchoSent()
        {
            signal = new ManualResetEvent(false);
 
            _parent._serverClient.ReceivedEcho -= GetMessageEcho;
            _parent._serverClient.ReceivedEcho += GetMessageEcho;
            _parent._serverClient.RestartCamera();
            signal.WaitOne(30000);
            signal.Dispose();
        }
C#
1
2
3
4
5
private void GetMessageEcho(object sender, ReceivedEchoEventArgs e)
        {
            signal.Set();
            messageEcho = e.Message;
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2019, 16:11

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Задержки
Всем добрый вечер! Недавно начал изучать WPF, и сейчас возникла одна проблема. Есть массив из Rectangle, нужно изменить в цикле Opacity...

Реализация задержки
Нужно вызвать задержку выполнения программы....Программа WPF. Thread.Sleep(300); //Вызывает зависание

Алгоритм задержки
Добрый вечер. Хочу попробовать динамически выводить текст в консоли. Какой алгоритм создания задержки? Не через функцию Sleep().

Задержки в таймере
например, таймер у меня опрашивает каждую секунду выполнение одного условия. Можно сделать так чтобы при выполнении этого условия сделать...


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

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

Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru