私は複数のスレッドで複数のファイルに書きたいと思っているC#でWindowsアプリケーションを作成しています。異なるポートからデータを取得していて、すべてのポートに1つのファイルが関連付けられています。それぞれのファイルにデータを書き込むために何度も同じスレッドを使用しますか?ポート10000,10001,10002からデータを取得していて、10000.txt、10001.txt、10002.txtという3つのファイルがあるとします。これらの3つのファイルにそれぞれデータを書き込むために3つのスレッドを作成しなければならず、これらのスレッドを何度も使用したいと考えています。可能でしょうか?可能であれば、小さなサンプルを与えることができますか?複数のスレッドで複数のファイルを書き込む方法は?
答えて
あなたは、各スレッドがやる独自のファイルを処理させる場合は?ポート・リーダー・スレッドが作成されたとき
だから、あなたはそのポートに属しているファイルを開き、そのファイルへのハンドルを格納します。理想的には、ポートの読み取りから書き込みのファイルを分離したいが、私'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);
}
}
}
そして、このようなようにそれらを起動する:あなたがデータを受信するたびに、ファイルに書き込みます簡単にするためにあなたに任せてください。
スレッドがどのように再利用されているのか分かりません。ループがありません。 – Tudor
OPはスレッドを再利用する必要はないと思います。それは何を使用していますか?スレッドなしで実行することもできます。 – CodeCaster
ええ、あなたはselectを使う必要があります。スレッドが少ない場合、問題を直感的に解決できます。 – Tudor
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);
});
- 1. 複数のスレッドで書き込みファイルを読み込む
- 2. 複数のスレッドで1つのファイルに書き込む方法は?
- 3. 複数のunittestを複数のファイルでダーツに書き込む方法は?
- 4. 同じファイルに複数のスレッドを書き込む
- 5. 複数の.csvファイルを書き込む
- 6. Cで複数回ファイルに書き込む方法は?
- 7. 複数のファイルに書き込む
- 8. 複数のcsvファイルに書き込む
- 9. ディレクトリ内の複数のファイルにデータを書き込む方法
- 10. CSVファイルをスレッド間で中断することなく複数のスレッドで書き込む方法は?
- 11. 複数のファイルを読み込んで複数のテーブルに書き込むバッチジョブ
- 12. Javaで複数のスレッドを書き込む
- 13. Ada:ファイルに複数回書き込む
- 14. 複数の辞書をPython 3.xの複数のcsvファイルに書き込む
- 15. 複数のスレッドからsqliteにデータを書き込む最良の方法
- 16. 複数の.ncを開き、複数のラスタを書き込む
- 17. Javaの複数のスレッドからFileOutputStreamに書き込む
- 18. 複数の列にPyspark UDAFを書き込む方法は?
- 19. モデルに複数のリモートメソッドを書き込む方法は?
- 20. 複数の行にQStringを書き込む方法は?
- 21. 複数行のawkコマンドをウィンドウに書き込む方法は?
- 22. 複数行更新のトリガを書き込む方法は?
- 23. Excelで複雑な数式を書き込む方法は?
- 24. 複数のサブクエリをHibernate基準で書き込む方法
- 25. ストアドプロシージャで複数のクエリを書き込む方法
- 26. 複数の条件でLINQを書き込む方法
- 27. C#Consoleアプリケーションで複数の値を含む定数を書き込む方法
- 28. 複数のスレッドからTraceListenerに書き込む
- 29. 複数のスレッドが同じブール値に書き込む
- 30. 複数スレッドのクロニクルキューに書き込む - > java.nio.BufferOverflowException
実際には、タイトル以外のhttp://stackoverflow.com/q/8035029/331508のchar複製のcharです。 –