Теперь к делу. Возникло предложение добавить в класс AbstractSerial функцию типа lastError или currentStatus. Применение этому следующее. К примеру, вызываю функцию открытия порта open(...), она возвращает false. Вызовом lastError определяю причину, почему порт не удалось открыть. Конечно можно определять причину, подписавшись к сигналу signalStatus, но это не всегда удобно.
первоначально у меня была такая мысль - но я от нее отказался по ряду причин:
1. зачем при ошибках вызывать lastError, потом анализировать код ошибки и т.п? ., если можно просто приконнектиться к сигналу signalStatus и автоматом получать все уведомления об изменении статуса последовательного у-ва!!
ИМХО, гораздо удобнее сразу после создания объекта - приконнектится к signalStatus чем вызывать постоянно lastError, тем более, что signalStatus - отражает не только ошибки, но и другие изменения состояния (по крайней мере так планировалось)
т.е. мы сможем вести (если, конечно это необходимо - иначе это можно просто в выключить) подробный лог работы устройства привязанный ко времени и т.п., что ИМХО, очень удобно.
2. а если у вас порт работает в многопоточном приложении и, к примеру, вы одним потоком/нитью читаете данные из порта - а другим пишете в порт... и, вдруг при чтении мы получаем ошибку .. мы вызываем lastError - но там другая уже ошибка, а не та, что от чтения.. (каламбур)... и допустим, что и в процессе записи тоже случилась ошибка и lastError => вернет последнюю ошибку..
т.е. в данном случае lastError сможет "зафиксировать" только
последнюю ошибку на момент вызова lastError(), т.е. о промежуточных ошибках мы дажне не узнаем!
+ не охота мне было (не осилил) городить огород из shared pointer, атомарных операций и т.п. - т.е. я поступил как проще.
-------------
Если и что-то добавлять - то может быть имеет смысл добавить дополнительный режим открытия у-ва типа AbstractSerial::Shared (помимо ReadOnly, WriteOnly и т.п.) при котором у-во будет открываться в режиме "мультидоступа"
... но опять - же, в MSDN написано, что Windows не поддерживает шаред моде в отношении последовательных портов (хотя нужно проверить - может врут?
)
Хотя, как я понял, этот режим может поддерживаться - но все зависит от драйвера последовательного порта.. т.е. не все девайсы это могут поддерживать... Опять - же НУЖНО ПРОВЕРИТЬ!