2011-11-07 11 views
-1

私は複数のスレッドで複数のファイルに書きたいと思っているC#でWindowsアプリケーションを作成しています。異なるポートからデータを取得していて、すべてのポートに1つのファイルが関連付けられています。それぞれのファイルにデータを書き込むために何度も同じスレッドを使用しますか?ポート10000,10001,10002からデータを取得していて、10000.txt、10001.txt、10002.txtという3つのファイルがあるとします。これらの3つのファイルにそれぞれデータを書き込むために3つのスレッドを作成しなければならず、これらのスレッドを何度も使用したいと考えています。可能でしょうか?可能であれば、小さなサンプルを与えることができますか?複数のスレッドで複数のファイルを書き込む方法は?

+0

実際には、タイトル以外のhttp://stackoverflow.com/q/8035029/331508のchar複製のcharです。 –

答えて

2

あなたは、各スレッドがやる独自のファイルを処理させる場合は?ポート・リーダー・スレッドが作成されたとき

だから、あなたはそのポートに属しているファイルを開き、そのファイルへのハンドルを格納します。理想的には、ポートの読み取りから書き込みのファイルを分離したいが、私'LL

List<PortReader> readerList = new List<PortReader>(); 

readerList.Add(new PortReader(10000)); 
readerList.Add(new PortReader(10001)); 
readerList.Add(new PortReader(10002)); 
// etc... 

foreach (PortReader reader in readerList) 
{ 
    new Thread(new ThreadStart(reader.StartReading)).Start(); 
} 

:その後、

class PortReader 
{ 
    StreamWriter _writer; 
    int _port; 
    YourPort _myPort; 

    public PortReader(int port) 
    { 
     // Do your port initialization stuff 

     _writer = new StreamWriter(port + ".txt"); 
    } 

    private void DataReceived(String data) 
    { 
     _writer.WriteLine(data); 
    } 

    public void StartReading() 
    { 
     while (_myPort.Connected) 
     { 
      // Do your port reading stuff 
      String data = _myPort.ReadData(); 

      // Do some processing with the data 

      // And now let it be written to the file 
      DataReceived(data); 
     } 
    } 
} 

そして、このようなようにそれらを起動する:あなたがデータを受信するたびに、ファイルに書き込みます簡単にするためにあなたに任せてください。

+0

スレッドがどのように再利用されているのか分かりません。ループがありません。 – Tudor

+0

OPはスレッドを再利用する必要はないと思います。それは何を使用していますか?スレッドなしで実行することもできます。 – CodeCaster

+0

ええ、あなたはselectを使う必要があります。スレッドが少ない場合、問題を直感的に解決できます。 – Tudor

1
var ports = new List<int> { 1000, 1001, 1002 }; 

Parallel.ForEach(ports, p => 
{ 
    var data = GetDataForPort(p); 
    var path = string.Format(@"C:\{0}.txt", p); 

    using (var writer = new StreamWriter(path)) 
     writer.Write(data); 
}); 
関連する問題