忍者ブログ
これは心の摘み合いだ。。。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

課題を簡単にしてもらいました。

Aボタン押下でスレッド作成、
Bボタン押下でスレッド終了する

スレッドが殺せない・・・
PR
実現したい機能って、どうやってまとめたらいいんだろ。。。
とりあえず、羅列???
①基本クラスはCFormViewクラス。
②スタイル:チャイルド、境界線:なしにする。
③MainViewのヘッダファイルをインクルードするのを忘れずに。
④ラインタイム箇所を変更する。

Visual C++ を使用して MFC アプリケーション内のスレッド間でソケット接続を渡す方法

------------------------------------------------------------------------------------------------------------------------------------------

概要

この資料では、MFC アプリケーションのスレッド間でソケット接続を渡す方法をサンプルで示します。サンプルはサーバーとクライアントの 2 つのプロジェクトで構成されています。サーバーは接続ごとに新規スレッドを作成してクライアントと通信します。

先頭へ戻る

詳細

サーバー

サー バーでは、MFC アプリケーションの複数のスレッドでソケットを使用する方法を示します。サーバーは接続要求を待ちます。新しい接続が要求されるとそれを受け付け、接続を 処理するスレッドを作成します。サーバーがメッセージを受信した場合は、そのメッセージを反転してクライアントに送り返します。

MFC では、新しい接続の場合は、リスニング ソケットのあるスレッドで接続を受け付ける必要があります。Accept の呼び出しは CAsyncSocket オブジェクト内で渡す必要があります。その後 MFC により、接続がスレッドで処理されるように、すべての情報が適切にセットアップされます。この接続を別のスレッドで処理する場合は、そのスレッドに MFC オブジェクトを渡すだけでは正常に機能しません。別のスレッドで接続が処理されるようにすべてを適切にセットアップするには、以下の手順を実行する必要が あります。

1. 接続を受け付けたスレッドで、CAsyncSocket オブジェクトからソケット ハンドルをデタッチします。
2. ソケット ハンドルをスレッドに渡します。
3. スレッドで、このハンドルを CAsyncSocket 派生オブジェクトにアタッチします。
スレッドの Attach の呼び出しによって、接続を処理するスレッドに送信されるソケット通知にすべての情報が適切にセットアップされます。

サーバー プロジェクトから抜き出した次のコードは、これを示したものです。

リスニング ソケットでの OnAccept
   void CListensoc::OnAccept(int nErrorCode)
{
// New connection is being established

CSocket soc;

// Accept the connection using a temp CSocket object.
Accept(soc);

// Create a thread to handle the connection.
// The thread is created suspended so that we can
// set variables in CConnectThread before it starts executing.
CConnectThread* pThread =
(CConnectThread*)AfxBeginThread(
RUNTIME_CLASS(CConnectThread),
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
...
// Pass the socket to the thread by passing the socket handle.
// You cannot pass a CSocket object across threads.
pThread->m_hSocket = soc.Detach();

// Now start the thread.
pThread->ResumeThread();

CAsyncSocket::OnAccept(nErrorCode);
}
スレッドの InitInstance
   BOOL CConnectThread::InitInstance()
{
...
// Attach the socket handle to a CSocket object.
// This makes sure that the socket notifications are sent
// to this thread.
m_socket.Attach(m_hSocket);
...
}
上記のコードにより、ソケットが 2 番目のスレッドに適切にセットアップされます。
------------------------------------------------------------------------------------------------------------------------------------------

msdnより。

わかったような、わからないような。。。
サーバ1 対 クライアント1 で
メッセージのやりとりをしなさい。
HOMENext ≫
カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
カテゴリー
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
No Name Ninja
性別:
非公開
バーコード
ブログ内検索
アーカイブ

Copyright © [ VC++闘いの足跡 ] All rights reserved.
Special Template : 忍者ブログでアクセスアップ - Design up blog
Special Thanks : 忍者ブログ
Commercial message : [PR]