Как получить код для многопоточности с одинаковым приоритетом в раунд-Роббин или отрезок времени в C# ?
Уважаемый Сэр / Мадам,
Я новичок в программировании на C#.
Я создаю код для связи со своей встроенной системой по протоколу TCP /IP.
существует несколько машин с разным IP-адресом, подключенных к одному ПК.
Я хочу общаться со всеми машинами одновременно, потому что все машинные данные важны.
(все машины равны и имеют одинаковый приоритет).
Я ссылаюсь на многие документы для многопоточности
Но это для процесса основанного на разном времени
Есть ли какой-нибудь способ в многопоточности, с помощью которого я могу сделать так, чтобы несколько потоков могли работать в соответствии с заданным временным срезом(в одно и то же время)?
т. е. предположим, что существует 3 потока с одинаковым приоритетом и заданный временной срез равен 10 мс, то,
Первый поток 1 начало,
через 10 мс поток 1 сохранит свои текущие данные и остановит его, а поток 2 запустится,
через 10 мс поток 2 сохранит свои текущие данные и остановит его, а поток 3 запустится
через 10 мс поток 3 сохранит свои текущие данные и остановит его, а поток 1 запустится
Этот процесс продолжать работать в течение бесконечного времени
Я уже делал этот тип многопоточности во встроенной системе.
Я хочу сделать то же самое в c# в visual studio.
Пожалуйста, дайте мне правильное руководство для этого с помощью примера.
От,
Вишал Акбари
Что я уже пробовал:
В настоящее время я общаюсь только с одной машиной( только один IP или один поток )
Jon McKee
Вы описываете способ, которым многие операционные системы уже планируют задачи на ЦП. Учитывая конкретную платформу, такую как Windows, вы можете использовать SetPriorityClass
и SetThreadPriority
чтобы обеспечить приоритет задач вашего кода, хотя это не рекомендуется, если у вас нет выделенных систем. Кроме того, вы не можете гарантировать, что ваш код будет выполняться каждые X миллисекунд из-за планирования на уровне ядра. Если такое количество планирования необходимо, вам нужно создать свою собственную квази-ОС, которая работает поверх аппаратного обеспечения. Это чрезвычайно сложная тема, которая выходит далеко за рамки того, что даст ответ QA.
anup.bhunia
Просто идея преодолеть ситуацию...
Создайте три потока, а затем с помощью таймера даже приостановите() и возобновите() поток в циклическом цикле. хотя;
Начиная с .NET 2.0, Suspend и Resume устарели, их использование не рекомендуется из-за опасности, присущей произвольной приостановке другого потока. Если поток, удерживающий блокировку критического ресурса, приостановлен, все приложение (или компьютер) может оказаться в тупике. Это гораздо опаснее, чем вызов Abort — который приводит к тому, что любые такие блокировки освобождаются (по крайней мере теоретически) в силу кода в блоках finally.