Отправка данных
В предыдущем разделе объяснялось, как обрабатывать входящий поток данных. Можно сказать, что там всё определялось входящими данными. Иногда нужно прямо противоположное: выполнять операции в зависимости от отправки данных.
Например, допустим, в некоторой системе при нажатии кнопки нужно отправить длинную строку данных. Простой код для этого выглядел бы так:
sub on_button_pressed
ser.setdata("This is a long string waiting to be sent. Send me already!")
ser.send
end sub
Приведённый код будет работать, но только если в момент его выполнения в буфере передачи (TX) есть необходимый объём свободного места (иначе данные будут усечены). Поэтому, очевидно, перед отправкой нужно убедиться, что в буфере передачи (TX) достаточно свободного места. Простое решение через опрос выглядело бы так:
sub on_button_pressed
dim s as string
s = "This is a long string waiting to be sent. Send me already!"
while ser.txfree < len(s) 'we will wait for the necessary amount of free space to become available
wend
ser.setdata(s)
ser.send
end sub
Опять же, это не лучший вариант, так как он блокировал бы другие обработчики событий. Поэтому вместо него мы применим код, использующий on_ser_data_sent:
dim s as string
s = "This is a long string waiting to be sent. Send me already!"
sub on_button_pressed
ser.notifysent(ser.txbuffsize-len(s)) ' causes the on_ser_data_sent event to fire when the tx buffer has space for our string
end sub
sub on_ser_data_sent
ser.setdata(s) ' put data in tx buffer
ser.send ' start sending it.
end sub
Когда мы нажимаем кнопку, генерируется событие on_button_pressed, и теперь система знает, что нужно отправить строку. С помощью ser.notifysent мы заставляем систему сгенерировать событие on_ser_data_sent, когда освободится необходимый объём места. Это событие сработает только один раз - и сработает сразу, если свободного места уже достаточно.
В обработчике события on_ser_data_sent мы помещаем данные в буфер передачи (TX) и запускаем их отправку.
Объём данных, при котором срабатывает on_ser_data_sent, не включает незафиксированные данные в буфере передачи (TX).