Моя цель: У меня есть HASP, с которым мне нужно общаться с помощью последовательного порта. Возможно, многие функции из разных потоков могут связываться с этим HASP - и мне нужна некоторая синхронизация.Создание класса для работы с последовательным портом
Что я сделал: Я создал класс оболочки HASPClass
. Выглядит так:
class HASPCLass
{
SerialPort m_port;
HASPClass(..)
{
//.. Init some other properties
m_port.Open();
//..
}
void CustomWriteToHASP()
{
//.. Do something
m_port.Write(...);
}
void CustomReadHASP()
{
//.. Do something
m_port.Read(...);
}
void Close()
{
//Some code to close m_port
};
}
Использование этого класса будет:
FUNCTION1 из некоторой нити:
HASPClass o = new HASPClass(..);
o.CustomWriteToHASP(..)
Function2 из другого потока:
HASPClass o1 = new HASPClass(..);
o1.CustomReadHASP(..)
задачи1: Теперь, если o
не закрыл m_port
- конструктор o1
будет бросать, так как порт открыт. Я хочу избежать этого и сделать o1
ждать o
, чтобы закончить работу.
То, что я думал,: Может быть, я должен сделать m_port
статический - статический и поставить замок везде, где он используется в HASPClass
, будет ли он решить вышеуказанную проблему? Также конструктор будет заменен только открытым статическим m_port
, если он закрыт. Будет ли этот подход решать большинство проблем, о которых я говорил ранее?
Update: Моя другая проблема заключается в том, что различные объекты могут задавать различные параметры (скорость передачи данных и т.д.) в конструкторе - так я сталкиваюсь с проблемой :(так как я один статический m_port
:(Что.. делать в таком случае ?? (? я мог бы ослабить это требование и сказать, что все объекты будут ставить одни и те же параметры в конструкторе, но это поможет)
Вы не [спросить это уже] (http://stackoverflow.com/questions/35086242/writing-class-which-encapsulates-serial-port-which-might-be-used-also- по-многие-й)? –
@MattBurland Nope удален, и это уточняется –
Используйте одноэлементный шаблон. Не создавайте новые объекты 'HASPClass' и вместо этого используйте метод GetInstance (или что-то подобное), который будет возвращать статический экземпляр' HASPClass' (или создать его, если он еще не существует). –