電子書籍の厳選無料作品が豊富!

こんばんは。
VC++.NET2003でC言語にて、UDPソケットプログラミングを行っています。

A:送信端末
B:受信端末
とし、送信端末から受信端末へ各パケットにシーケンス番号を付加し1024Byteずつパケットを送信。受信端末は、送信端末からのパケットを受信するのですが、受信できなかったパケットがある場合、シーケンス番号を送信端末へ送信します。

これらから、送信端末は、送信と受信スレッドを持つ、マルチスレッドを行っています。

以下に送信端末のプログラムを示します。
main{
 //受信スレッド生成
 hTh = (HANDLE)_beginthreadex(NULL, 0, Sequence_Number, NULL, 0, &thID);

 UDPSending(s_port,szServer);

 //受信スレッド終了待ち
 WaitForSingleObject( hTh, INFINITE );
 CloseHandle(hTh);
}

//送信スレッド
UDPSending(s_port,szServer){
 //fread関数にて、1024Byteずつ区切る
 while((n = fread(send_Buf,1,SEND_DATA_SIZE,fp)) != 0) {
  UDPDataSend(s_port, szServer, send_Buff, n+mojisuu);
 }
}

UDPDataSend(unsigned short s_port, char *szServer, char *send_Buff, int n){
  sendtoにて受信端末へ送信
}

//受信端末からの未受信シーケンス番号を受信(受信スレッド)
unsigned __stdcall Sequence_Number(void *lpx){
  recvfrom関数によりシーケンス番号を受信
}

[付け加えたい機能]
送信スレッドにおいて100個のパケットを送信したら、一時的に送信スレッドを停止させ、受信スレッド内の処理を行い、受信スレッド内の処理が終えたら、再度、送信スレッドを再開させる方法はありますでしょうか?

イメージでは・・・
S:送信スレッド
R:受信スレッド
とした場合、

S(100個パケット送信)→Sの休止→Rの処理→Rの処理が終えたら→Sの再開(再度100パケット送信)・・・・
の繰り返しです。

よろしくお願いします。

A 回答 (1件)

>S(100個パケット送信)→Sの休止→Rの処理→Rの処理が終えたら→Sの再開(再度100パケット送信)・・・・


の繰り返しです。

もし、上記のようにしたいのなら、マルチスレッドでなく、シングルスレッドで、S,Rを交互に呼び出してはいかがでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!