【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

お世話になります。
今、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)停止ボタンクリックが出来るようになった場合、停止ボタンクリック関数内には、ソケットクローズ処理だけで送信は停止しますか?

どうぞよろしくお願い致します。

A 回答 (2件)

1)「応答無し」になる、典型的なWindowsではやってはいけないコードです。



ちゃんと応答させたいなら「マルチスレッド」とか「ワーカスレッド」を調べてください。

2)ソケットを閉じることができれば、
sendtoが不正なソケットエラーを出すはずですが、
そういう方法はお勧めしません。
きちんとイベント通知なりすることを推奨。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/22 09:35

(1)


http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng. …
http://homepage1.nifty.com/MADIA/vc/vc_bbs/20070 …
処理中メッセージ取得orスレッド化

(2)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
ソケット終了処理時の手順
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/22 09:34

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