Как получить несколько задач одновременно в одном порту - PullRequest
1 голос
/ 27 июля 2010

Я новичок в остром и я застрял с этой задачей.Мое требование - я создаю много потоков, и эти потоки (отправка с использованием COM1) должны связываться с одним последовательным портом, скажем, COM2.Все потоки должны отправлять сообщения, используя один COM-порт (получать через COM2).

скажем, отправлять "helloworld1" (используя thread1) и "helloworld2" (thread2) через COM1 и получать через COM2 в гипертерминале.Поэтому мне нужно увидеть оба helloworlds в гипертерминале одновременно.

Пожалуйста, помогите мне.

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

Поскольку вы хотите отправлять сообщения из двух разных потоков, вам необходимо окружить ваши вызовы SerialPort.Write () блокировкой {} следующим образом:

<codE>
SerialPort s = new SerialPort();

//configure serial port, etc.

//spin off additional threads

//in each thread, do this:
lock(s)
{
  s.Write("Hello World1");
}
</code>
2 голосов
/ 27 июля 2010

Вы хотите начать здесь .Вы можете создать 2 экземпляра класса SerialPort для каждого COM-порта, на который хотите отправлять / получать сообщения.Я использовал 2 варианта получения данных используя класс SerialPort:
1.Вы можете вручную «читать» порт через определенный интервал (например, вы можете прочитать каждый поток по мере необходимости).
2.Класс SerialPort предоставляет событие DataReceived, на которое можно подписаться (также доступен ErrorReceived).

Вариант 1 может быть наиболее подходящим.

Редактировать

После прочтения вашего комментария вариант 2 может быть более подходящим, так что вы можете иметь одну ветку "receive"подписывается на события DataReceived / ErrorReceived.Для @Slider блокировка также потребуется для обеспечения записи только 1 потока в любой момент времени.

...