Когда мы должны отделить Stream от DataWriter и DataReader? И каково общее руководство этой модели ввода / вывода?

Реализация с использованием C ++ / CX.
В примере DataReaderWriter говорится, что мы должны отсоединиться () до того, как объект DataWriter умрет, чтобы предотвратить закрытие потока. Но в других примерах кодов DataWriter / DataReader я не нашел больше доказательств того, что это требование, и в документах не упоминается ничего более подробного. Мой вопрос, когда мы должны detachStream ()? Например, если объект StreamSocket переживает объект DataWriter, нужно ли мне detachStream ()?
Или это требуется только в том случае, если нет других ссылок, содержащих жизнь базового объекта потока?

И еще один вопрос о DataWriter / DataReader:
После того, как мы вызовем StoreAsync / LoadAsync в потоке A, можем ли мы продолжить вызов WriteXXX / ReadXXX в потоке A без блокировки, ожидающей завершения сохранения / загрузки?

0

Решение

Мой вопрос, когда мы должны detachStream ()?

Как Комментарии в примере DataReaderWriter сказано:

Чтобы продлить срок службы потока, отсоедините его от DataWriter, чтобы он не закрывался при разрушении dataWriter. Если мы не сможем отсоединить поток, деструктор dataWriter закроет основной поток, предотвращая его последующее использование DataReader ниже.

DetachStream метод используется здесь, потому что основной поток должен быть использован последующим DataReader, Если мы не отсоединим его от DataWriter, он будет закрыт, когда dataWriter разрушен. Так что этот метод не является обязательным. Это зависит от вашего сценария, если вам не нужно использовать поток после закрытия DataWriterВы не можете использовать этот метод.

Для StreamSocket, если вы хотите повторно использовать сокет с другим устройством записи данных, вы должны отсоединить поток от текущего устройства записи перед его удалением. Так что в некотором смысле, если StreamSocket объект пережить DataWriter объект, вы должны использовать DetachStream метод.

После того, как мы вызовем StoreAsync / LoadAsync в потоке A, можем ли мы продолжить вызов WriteXXX / ReadXXX в потоке A без блокировки, ожидающей завершения сохранения / загрузки?

Я не уверен, почему вы хотите продолжать вызывать WriteXXX / ReadXXX, не дожидаясь завершения сохранения / загрузки. За StoreAsync метод, он передает данные в буфере в резервное хранилище. Обычно мы используем его, когда заканчиваем писать данные. Поэтому, когда мы вызываем этот метод, другого вызова метода WriteXXX не должно быть. И для LoadAsync метод, нам нужно дождаться его завершения, прежде чем вызывать метод ReadXXX, если данные загружены не полностью или операция загрузки данных завершается неудачно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]