SerialPort DataReceived Поток событий

var=$(echo "asdf")
echo $var
# => asdf

Используя этот метод, команда сразу оценивается и сохраняется ее возвращаемое значение.

stored_date=$(date)
echo $stored_date
# => Thu Jan 15 10:57:16 EST 2015
# (wait a few seconds)
echo $stored_date
# => Thu Jan 15 10:57:16 EST 2015

То же самое с обратным шагом

stored_date=`date`
echo $stored_date
# => Thu Jan 15 11:02:19 EST 2015
# (wait a few seconds)
echo $stored_date
# => Thu Jan 15 11:02:19 EST 2015

Использование eval в $(...) не будет оцениваться позже

stored_date=$(eval "date")
echo $stored_date
# => Thu Jan 15 11:05:30 EST 2015
# (wait a few seconds)
echo $stored_date
# => Thu Jan 15 11:05:30 EST 2015

Используя eval, он оценивается при использовании eval

stored_date="date" # < storing the command itself
echo $(eval $stored_date)
# => Thu Jan 15 11:07:05 EST 2015
# (wait a few seconds)
echo $(eval $stored_date)
# => Thu Jan 15 11:07:16 EST 2015
#                     ^^ Time changed

В приведенном выше примере, если вам нужно запустить команду с аргументами, поместите их в строку, которую вы храните

stored_date="date -u"
# ...

. Для сценариев bash это редко актуально, но последнее примечание. Будьте осторожны с eval. Eval только строки, которыми вы управляете, никогда не строки, исходящие от ненадежного пользователя или созданные из ненадежного пользовательского ввода.

3
задан Baddack 18 March 2019 в 16:25
поделиться

1 ответ

Согласно этому посту на форумах MSDN здесь .

Когда это происходит, данные, полученные в вашем случае, погружаются в ThreadPool и вызывают QueueUserWorkItem (), который выделяет поток пула потоков для вызова вашего обработчика событий DataReceived. Затем он снова немедленно вызывает WaitCommEvent (), чтобы дождаться следующего «чего-то интересного».

Звучит так, как будто объект SerialPort использует ThreadPool, поэтому, хотя событие DataReceived вызывается для разных Threads, они уже существуют в ThreadPool и, следовательно, нет накладных расходов. для создания новых.

Таким образом, событие может быть запущено даже тогда, когда вы там, потому что оно будет в другой ветке.

0
ответ дан Baddack 18 March 2019 в 16:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: