Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
63 / 62 / 11
Регистрация: 28.12.2011
Сообщений: 280

Приостановка потока до выполнения какого либо события

02.09.2012, 05:35. Показов 4604. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу клиент - серверное приложение где в методе для продолжение работы нужно дождаться ответа от клиента, он получается в других потоках.
C#
1
2
3
4
5
6
                //ждем хода клиента
                while (b)
                {
                    if (DateTime.Now > stop || player[posPlay].progress.posAction != Action.None)
                        b = false;
                }
Я заключаю поток в цикл while до ответа от клиента или завершения допустимого времени ожидания ответа. Но меня мучают сомнения что я все в корне делаю не правильно, и есть намного красивый вариант этого решения, или и так сойдет?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2012, 05:35
Ответы с готовыми решениями:

Приостановка выполнения процесса/потока (windows)
Есть запущенный процесс, например, калькулятор или блокнот, известно ID процесса и его имя. Нужно сделать: на форме есть две кнопки, при...

вероятность какого-либо события при условии
Буду очень признателен за решение. На данный момент совершенно запутался. Не понимаю как математически записать условие "Также дано...

для выполнения апплета требуется установка какого-либо сервера ?
для работы PHP страниц я прикручивал к Апачу PHP. Нужно что-то прикручивать к Апачу для работы Java апплетов ?

6
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.09.2012, 12:39
Good1101, можно сделать Thread.Sleep(10000) чтобы снизить нагрузку. (ну или любое другое число на ваш выбор. Хотя конечно это тоже идеологически неправильно
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
03.09.2012, 09:40
C#
1
i=cSocket.Receive(byteArray);
i - число принятых байт(инт)
cSocket - Socket
byteArray - массив байт в которые будет производится чтение

пока данные не приняты программа не начинает выполнять действия ниже
0
63 / 62 / 11
Регистрация: 28.12.2011
Сообщений: 280
03.09.2012, 10:51  [ТС]
Почти таким образом у меня и происходит получение пакетов, но в другом потоке, который отвечает только за получение пакетов от своего сокета, этот же поток отвечает за логику приложения, тоесть когда и какие команды отдавать клиентам и какую информацию им отправлять, заслипать поток я тоже не могу так как ответ от клиента может придти любое время и нужно сразу же продолжать выполнение метода.
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
03.09.2012, 12:17
так останови главный поток, а потоки где происходит чтение данных от клиентов не трогай) хотя в этом помочь не смогу, никогда не задавался целью остановить выполнение основного потока программы... только неявно MessagBox' ами получалось))

Добавлено через 11 минут
хотя здесь необходимо пояснение для чего тебе это вообще надо. я так понимаю что данное дейстиве необходимо вставить внутрь сервера, но вот зачем?
0
 Аватар для mikhail_g
192 / 147 / 27
Регистрация: 02.05.2011
Сообщений: 467
03.09.2012, 12:20
Цитата Сообщение от Spectral-Owl Посмотреть сообщение
так останови главный поток
Вот так делать не надо.
Используй класс BackgroundWorker для синхронизации вспомогательного и основного потоков. Во вспомогательном запусти свой цикл while и жди сколько надо. Как только ответ придёт в основном потоке прожжётся событие BackgroundWorker_Completed(не помню как оно называется). Обновишь UI и т.п.
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
03.09.2012, 14:36
я тоже делал прием/отправку данных в разных потоках.
для синхронизации делал так:

в основном модуле определил
C#
1
private readonly EventWaitHandle scanmap = new EventWaitHandle(false, EventResetMode.AutoReset, scanmap");
так где отправка сделал, паузу
C#
1
scanmap.WaitOne(10000);
и при получении нужного ответа сделал сброс "паузы"
C#
1
 scanmap.Set();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.09.2012, 14:36
Помогаю со студенческими работами здесь

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

Как в ADO в таблице с логическим типом изменить значение с true на false после какого либо события?
У меня в Delphi есть таблица "Список номеров". Мне нужно, чтобы при заключении договора в в таблице "Номерной фонд" в поле...

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

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

Приостановка второстепенного потока
Привет ребят. Нужно создать поток, а потом в функции этого потока приостановить его. Читал на MSDN, что для этого нужны специальные права,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru