私のアプリケーションに役立つ必要があります。コマンドラインパラメータに応答する簡単なプログラムです。アプリケーションが初めて呼び出されると、メインスレッドが別の処理を実行する間に、アプリケーションは別のスレッドでパイプサーバー(ブロッキング、オーバーラップしない)として起動します。これで、ユーザーは同じアプリケーション実行可能ファイルとコマンドラインパラメータを使用してアプリケーションを呼び出すことができますが、アプリケーションの最初のインスタンスではないため、パイプを使用してコマンドラインパラメータを最初のインスタンスに渡し、だから、それはパターンの単一のプロセスのようなものです。Windows Named Pipeの問題:エラーコード233が交互に表示される
理想的には、それは次のようにする必要があります:
app.exe "first" // starts app.exe as a pipe server and prints "first"
app.exe "second" // client process causes server instance to print "second"
app.exe "third" // client process causes server instance to print "third"
app.exe "fourth" // client process causes server instance to print "fourth"
app.exe "fifth" // client process causes server instance to print "fifth"
app.exe -quit // client process causes server instance to terminate.
は今、私の唯一の問題は、私は上記の行を行う際にこの問題が発生し、次のとおりです。
app.exe "first" // starts app.exe as a pipe server and prints "first"
app.exe "second" // client process returns a GetLastError code of 233
app.exe "third" // client process causes server instance to print "third"
app.exe "fourth" // client process returns a GetLastError code of 233
app.exe "fifth" // client process causes server instance to print "fifth"
app.exe -quit // client process returns a GetLastError code of 233
マイパイプサーバー・コードは、このような何かを行きます(擬似コード):
私のクライアントのバージョンは、このように書きCreateNamedPipe();
// Code below now runs on a separate thread...
while(!Quit)
{
if(ConnectNamedPipe() is successful)
{
if(PeekNamedPipe() has a message)
{
ReadFile();
ProcessReceivedMessage();
}
FileFlushBuffers();
DisconnectNamedPipe();
}
}
CloseHandle(the pipe);
(擬似コード):
if(WaitNamedPipe(FOREVER) != 0)
{
GetParametersAndFormAMessage();
CreateFile();
WriteFile(); // Sends message to the pipe server
}
CloseHandle();
MSDNによれば、サーバーがDisconnectNamedPipe()を使用すると、クライアントは強制的に切断され、クライアントの次の試行時にエラーが発生します。それが理由だと思いますか?もしそうなら、余分なエラーが発生していないクライアントを切断するにはどうすればいいですか?そうでなければ、私はこの仕事をするために知っておくべきことは何ですか?これを考え出すのに多くの時間を費やしました。
これは論理的にあなたが(接続され得るんすべてのスレッドが新しいスレッドを生成するため)に接続されない一つのスレッドを持っていることを意味するだけクライアントが接続するのを待っています。実行が終了すると、そのスレッドが適切にクリーンアップされるようにするにはどうすればよいですか? –