• ベストアンサー

割り込み処理について

お世話になります。 今、VC++でWinSockを用いてパケット送信ソフトを作成しています。 パケット送信開始ボタンをクリックすると呼ばれる OnBnClickedButtonStart() 停止ボタンをクリックすると呼ばれる OnBnClickedButtonStop() 今、送信開始ボタンクリックイベント関数 OnBnClickedButtonStart()内にソケットの設定や ソケット送信などを行っています。 while(1){ if( (sendto(sock, send_buf, size , 0,(struct sockaddr*)send_addr, sizeof send_addr)) == SOCKET_ERROR ){ MessageBox("Error : Send Socket !"); return; } } と送信開始ボタンをクリックすると無限ループでソケットを送信しています。 以下質問です。 (1)送信開始ボタンをクリックするとwhile()で無限ループになります。その処理中に、停止ボタンなどクリックすることは出来ますか?出来る場合どのようにして出来るようになるのでしょうか?(プロパティの設定とか?) (2)停止ボタンクリックが出来るようになった場合、停止ボタンクリック関数内には、ソケットクローズ処理だけで送信は停止しますか? どうぞよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • canonbowl
  • ベストアンサー率41% (14/34)
回答No.1
the-ai
質問者

お礼

回答ありがとうございます。 調べてみます。

その他の回答 (1)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

1)「応答無し」になる、典型的なWindowsではやってはいけないコードです。 ちゃんと応答させたいなら「マルチスレッド」とか「ワーカスレッド」を調べてください。 2)ソケットを閉じることができれば、 sendtoが不正なソケットエラーを出すはずですが、 そういう方法はお勧めしません。 きちんとイベント通知なりすることを推奨。

the-ai
質問者

お礼

ありがとうございます。 「ワーカースレッド」調べてみます。

関連するQ&A

専門家に質問してみよう