VisualC++6.0, WindowsXP, MFC, Dialog の環境
はじめまして
これからプログラムをつくろうと考えています。
つくってから失敗したらたいへんなので、先に質問いたします。
ソケット通信で一度に大量のデータを収集したいのですが、
時間がかかるので「中止ボタン」を貼り付けておいて中止できるようにしたいです。
こんな時はマルチスレッドでプログラムしないとダメなのでしょうか?
マルチスレッドにする場合には、送信と受信のスレッドを別々にしたほうが良いです
か?
スレッドって扱ったことがないし、まだ初心者なので、
わかりやすく教えて頂けると嬉しいです。よろしくお願いします。
> つくってから失敗したらたいへんなので、先に質問いたします。
いきなり本番コード書いたらそりゃたいへんだけど、
お試しコード書けばやり直し効くやないですか。
1対1の通信ならシングル・スレッドで十分なことも多いです。
受信/送信可能となったときイベント投げてくれるOS(たとえばWindows)
だったらなお楽ちん。
επιστημηさん
お返事ありがとうございます。
> お試しコード書けばやり直し効くやないですか。
その通りなのですけど、エディットボックスをやっと操作できるようになったレベルな
ので、お試しするだけでもたいへんなのです (>_<)
ソケットもスレッドも ちんぷんかんなので。
シングルスレッドで、いっぱい通信中に「中止」ボタンをなかなか押せない
ということはないのでしょうか?
> その通りなのですけど、エディットボックスをやっと操作できるようになったレベル
な
> ので、お試しするだけでもたいへんなのです (>_<)
そのレベルでお試しやらずにいきなり本番だと256倍(当社比)たいへんですよ?
> シングルスレッドで、いっぱい通信中に「中止」ボタンをなかなか押せない
> ということはないのでしょうか?
かどうかをお試しすんですよ。
...と突き放しっぱではァレなので。
プロトコルが大きく関与するんですよ。
データくれ!と言った途端に大量のデータをダラダラ送りつけられるなら
ちょいと厳しいかもしれない。けれど次のデータくれ!と要求するたびに
ブツ切りにしたカタマリを送ってくるのなら、次のデータくれ!と言わな
ければ送信側は待ちに入るのだから十分対処できるでしょう。
でかいデータをダラダラ送りつけてくるにしても、データが到着したイベント
の隙間にキャンセルボタンが押されたイベントが割りこんでくれるなら
そのイベントに反応して受信を停止すりゃええわけで。
そんなこんなをお試ししてはいかがでしょうか。
マルチスレッドにしてもソケット通信にしても覚えといて損はないと思うので
一度に何でもやろうとしないでまずはソケット通信をシングルスレッドで組んで見て
やり取りを行う為にはどうしたら良いかを確認。
マルチスレッドも簡単な物を組んで見て動作を確認。
というようにステップを踏んで試した方が良いです。
両方の動きがわかってきたらマルチスレッドでソケット通信を
するのを試してみる。
何かを実現する時に一度で正解に近づこうするのは難しいので
うまくステップを分けて一つずつクリアすると良いと思いますよ。
MFCで利用できるソケットクラスには同期ソケットと非同期ソケットの2種類があります。
前者を利用する場合は送受信処理を別スレッドにしなければ
処理を中断することはできません。
後者の場合、送受信中にアプリケーションがブロックされることはないので
επιστημηさんの方法でOKです。
ダメモトでがんばってみます。
ぱっちょさん
いろいろと覚えていこうと思います。
すばるさん
非同期ソケットですネ 調べてみます。
皆様アドバイスありがとうございました ***△*(*^-^*)*△***
やるだけやって思うように動かなんだら、
ここで愚痴れば誰か聞いてくれますよ♪
επιさん
> やるだけやって思うように動かなんだら、
> ここで愚痴れば誰か聞いてくれますよ♪
ありがとうございます、まず自分でがんばってみます。
「ボタンサイズ変更」 読んじゃいました、 いろいろとたいへんデスネ (^_^)
わからなかったらまた来ますので、よろしくお願いします。m(__)m
...ただねー、Visual C++ 6.0 だと僕んとこでも動いたよ/ダメみたいよって
追試できるヒトがかなり減ってます。自分のせいじゃないトコでトラブって
microsoftに訴えてもサポート切れてますで一蹴されるでしょう。
質問に答えてくれる方々の多くがVC++6を捨ててます。それが気がかり。
> 質問に答えてくれる方々の多くがVC++6を捨ててます。それが気がかり。
今月から配属がかわり、念願のプログラマーになれたんです。
上司は短期間でいろいろできるようになり、プログラマーらしくなれたなら
新しいバージョンを購入してくれると言っています。
がんばります (*^_^*)
クローズしましたが、
> 質問に答えてくれる方々の多くがVC++6を捨ててます。それが気がかり。
ポーティングの予算がど~たらで、まだしばらくは仕事で VC6.0 を使ってます。
いいかげんやめたい(笑)。
それはめでたい。応援するよー♪
となるとMFCならまずは非同期ソケット: CAsyncSocket あたりからいじくってみるです
ね。
そんなに難しくありません。一旦ソケットが開けばファイルの読み書きと似たよなも
ん。
> いいかげんやめたい(笑)。
やめないで!!!(大笑)
困ります。
ここって、面白い方がいっぱいいますネ (*^_^*)
> それはめでたい。応援するよー♪
ありがとうございます。
> MFCならまずは非同期ソケット: CAsyncSocket あたりからいじくってみるですね。
CAsyncSocket ですね、調べてみます。
> 一旦ソケットが開けばファイルの読み書きと似たよなもん。
ファイルも難しくて苦手なんです (>_<)
向いてないのかなぁ、私。
ではまた~ ***(*^_^*)***