2011-11-07 3 views
-1

C#에서 여러 스레드로 여러 파일을 쓰고 싶습니다. 여러 포트에서 데이터를 가져 오는 중입니다. 모든 포트와 관련된 파일이 하나 있습니다. 모든 포트에 대한 스레드 생성이 가능합니다. 각각의 파일에 데이터를 쓰는 데 동일한 스레드를 반복해서 사용합니까? 내가 포트 100001000110002에서 데이터를 가져 오는 중이며 10000.txt, 10001.txt 및 10002.txt와 같은 세 개의 파일이 있다고 가정합니다. 이 세 파일 각각에 데이터를 쓰는 데 쓰레드 세 개를 만들어야하고이 쓰레드를 반복해서 사용하고 싶습니다. 가능합니까? 가능한 경우 작은 샘플 코드를 제공 할 수 있습니까?여러 스레드로 여러 파일을 작성하는 방법은 무엇입니까?

+0

제목 이외의 문자는 http://stackoverflow.com/q/8035029/331508의 char 사본입니다. –

답변

2

각 스레드가 자체 파일을 처리하도록하면 어떻게됩니까?

그래서 포트 판독기 스레드가 만들어지면 해당 포트에 속한 파일을 열고 해당 파일에 핸들을 저장합니다. 당신이 데이터를 수신 할 때마다, 당신은 파일에 기록 :

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

그래,하지만 당신은 선택을 사용해야 할 수 있습니다. 스레드가 거의 없다면 문제를 해결하는 직관적 인 방법입니다. – 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); 
}); 
관련 문제