[過去ログ] マルチスレッドプログラミング相談室 その3 (978レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
480(4): 05/03/18 11:15 AAS
@/A-----------------------------------------
環境
WinXP Pro
VC++ 6.0
VC++でマルチスレッドを用いた複数端末通信プログラムを作っています。
端末との通信はできたのですが、プログラムが終了するときにメモリリークが発生してしまいます。
プログラム構成は以下の通りです。
MainApp : CWinApp (アプリケーション)
MainSock : CAsyncSocket (アプリケーションメインソケット)
SubThread : CWinThread (各端末毎の接続を担当するスレッド)
SubSock : CSocket (端末とのデータ送受信用ソケット)
MainApp::InitInstance(){
g_Sock = new MainSock(); // メインソケット生成
g_Sock->Listen(); // 接続要求待ち
}
MainSock::OnAccept(){
SubThread* pThread = (SubThread*)AfxBeginThread()
スレッドにソケットを引き渡す
pThread->ResumeThread();
}
SubThread::InitInstance(){
m_SubSock.Attach( 渡されたソケット );
}
void SubSock::OnReceive(){
受信データの読み込み
}
483: 480 05/03/18 12:46 AAS
ええっそうなんですか・・・
じゃあ、単純にソケットを複数個用意して、処理を割り当てればいいんですかね・・・?
何か参考になるHPとかあったら教えて頂けませんか?
485: 480 05/03/18 14:07 AAS
一応、メインスレッドで接続管理、サブスレッドでデータ通信になってます。
@メインスレッドでメインソケットをListenで待機
AメインソケットのOnAcceptでサブスレッドを生成、サブスレッドのメンバ変数にソケットを渡す
Bサブスレッドのソケットでデータ送受信
Cサブスレッドのソケットを閉じる
というところまではできたのですが、Aで生成したサブスレッドが終了できない、という状況です。
>MFC ソケットでぐぐると一杯出てくるよ。
散々ぐぐって色々見てみたんですが、ソースの一部しか載ってなかったり
プロジェクトの性質から使えなかったり、という感じだったので
足りない部分を自分で作ってみたらこんな感じになってしまいました。
487(1): 480 05/03/18 14:56 AAS
>イベントカーネルオブジェクトなりで、メインスレッド<->サブスレッド間の
>通知機構を実装しなきゃだと思う。
VC++あまり弄った事がなくてソケットの部分だけ調べまくってやってたので、
存在を忘れていました。
今回はとりあえず動かなければどうしようもないので、
Run()の中ですぐSubSock.Receive()を呼んでデータを受信し、
ループ処理せずにAfxEndThread(0,true);で終了する、という方法でやる事にしました。
他にも色々いい方法があるようなので、今度調べてみたいと思います。
どうも有難うございました。
490: 480 05/03/18 15:18 AAS
有難うございます。読んでみます&試してみます。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.038s