Захват данных из разных портов на один порт в C # - PullRequest
0 голосов
/ 04 ноября 2011

Я делаю приложение на c #, в котором я непрерывно получаю данные из разных портов на один порт в формате пакета. Независимо от того, какие данные я получаю, является непрерывным. Я получаю данные через порт 24097 в формате пакета из другого порта источника.Для этого я создал один поток для порта 24097, который непрерывно принимает данные и, как только он получает данные, передает его другому потоку из пула потоков, который записывает эти данные в соответствующий файл. Но моя проблема заключается в том, что всякий раз, когда один поток записывает данные всоответствующий файл, и если следующие данные поступают для этого файла до завершения первой операции записи, то как я узнаю, происходит ли операция записи данных? Потому что, открыв файл, я не хочу закрывать его после записи одного потокаОн должен быть открыт для записи данных в другой поток.пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2011

Я не уверен, что пул потоков очень помогает здесь с файлами дисков. Один поток записи на диск имеет больше смысла. В каждом потоке сервера / клиента вы можете поставить в очередь (blockingCollection) полные экземпляры буфера данных в потоке записи и немедленно создать новый () другой буфер для поступления следующих данных. Каждый экземпляр буфера может содержать ссылку на порт класса 'fileWriter', который содержит спецификацию файла, дескриптор файла, методы записи и т. д., так что поток записи может открывать / записывать / закрывать файл, возможно, в соответствии с инструкциями перечисления. в каждом буфере.

FileWriter может содержать собственный список / очередь (любая очередь будет делать - она ​​вызывается только из одного потока), что позволяет буферизовать экземпляры буфера до тех пор, пока не будет сформирован большой кусок данных, и только затем фактически выполняйте запись в файл, экономя при этом на движениях головы.

0 голосов
/ 04 ноября 2011

Как насчет использования коллекции ConcurrentQueue для хранения данных, которые будут записаны в файл?:

http://msdn.microsoft.com/en-us/library/dd267265.aspx

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