CWinThread
クラス
アプリケーション内の実行中のスレッドを表します。
構文
class CWinThread : public CCmdTarget
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CWinThread::CWinThread |
CWinThread オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CWinThread::CreateThread |
オブジェクトの実行を CWinThread 開始します。 |
CWinThread::ExitInstance |
スレッドが終了したときにクリーンにオーバーライドします。 |
CWinThread::GetMainWnd |
スレッドのメイン ウィンドウへのポインターを取得します。 |
CWinThread::GetThreadPriority |
現在のスレッドの優先度を取得します。 |
CWinThread::InitInstance |
スレッド インスタンスの初期化を実行するためにオーバーライドします。 |
CWinThread::IsIdleMessage |
特殊なメッセージをチェックします。 |
CWinThread::OnIdle |
スレッド固有のアイドル時間処理を実行する場合にオーバーライドします。 |
CWinThread::PostThreadMessage |
メッセージを別 CWinThread のオブジェクトに投稿します。 |
CWinThread::PreTranslateMessage |
Windows 関数 TranslateMessage にディスパッチされる前にメッセージをフィルター処理します DispatchMessage 。 |
CWinThread::ProcessMessageFilter |
アプリケーションに到達する前に、特定のメッセージをインターセプトします。 |
CWinThread::ProcessWndProcException |
スレッドのメッセージおよびコマンド ハンドラーによってスローされたすべてのハンドルされない例外をインターセプトします。 |
CWinThread::PumpMessage |
スレッドのメッセージ ループを格納します。 |
CWinThread::ResumeThread |
スレッドの中断カウントをデクリメントします。 |
CWinThread::Run |
メッセージ ポンプを使用したスレッドの制御機能。 既定のメッセージ ループをカスタマイズするには、オーバーライドします。 |
CWinThread::SetThreadPriority |
現在のスレッドの優先度を設定します。 |
CWinThread::SuspendThread |
スレッドの中断カウントをインクリメントします。 |
パブリック演算子
名前 | 説明 |
---|---|
CWinThread::operator HANDLE |
オブジェクトのハンドルを CWinThread 取得します。 |
パブリック データ メンバー
名前 | 説明 |
---|---|
CWinThread::m_bAutoDelete |
スレッド終了時にオブジェクトを破棄するかどうかを指定します。 |
CWinThread::m_hThread |
現在のスレッドへのハンドル。 |
CWinThread::m_nThreadID |
現在のスレッドの ID。 |
CWinThread::m_pActiveWnd |
OLE サーバーがインプレース アクティブな場合にコンテナー アプリケーションのメイン ウィンドウへのポインター。 |
CWinThread::m_pMainWnd |
アプリケーションのメイン ウィンドウへのポインターを保持します。 |
解説
実行のメイン スレッドは、通常、; CWinApp
から派生したCWinApp
オブジェクトによって提供されますCWinThread
。 追加の CWinThread
オブジェクトを使用すると、特定のアプリケーション内で複数のスレッドを使用できます。
サポートされる CWinThread
スレッドには、ワーカー スレッドとユーザー インターフェイス スレッドの 2 つの一般的な種類があります。 ワーカー スレッドにはメッセージ ポンプがありません。たとえば、スプレッドシート アプリケーションでバックグラウンド計算を実行するスレッドなどです。 ユーザー インターフェイス スレッドにはメッセージ ポンプがあり、システムから受信したメッセージを処理します。 CWinApp
およびそこから派生したクラスは、ユーザー インターフェイス スレッドの例です。 他のユーザー インターフェイス スレッドから直接 CWinThread
派生することもできます。
クラス CWinThread
のオブジェクトは、通常、スレッドの期間中存在します。 この動作を変更する場合は、次に設定 m_bAutoDelete
します FALSE
。
CWinThread
このクラスは、コードと MFC を完全にスレッド セーフにするために必要です。 スレッド固有の情報をメインするためにフレームワークによって使用されるスレッド ローカル データは、オブジェクトによってCWinThread
管理されます。 このスレッド ローカル データの処理に CWinThread
依存するため、MFC を使用するすべてのスレッドを MFC で作成する必要があります。 たとえば、ランタイム関数 _beginthread
によって作成されたスレッドでは、 _beginthreadex
MFC API を使用できません。
スレッドを作成するには、次を呼び出します AfxBeginThread
。 ワーカー スレッドとユーザー インターフェイス スレッドのどちらを使用するかに応じて、2 つのフォームがあります。 ユーザー インターフェイス スレッドが必要な場合は、-derived クラスのCWinThread
ポインターにCRuntimeClass
渡AfxBeginThread
します。 ワーカー スレッドを作成する場合は、制御関数への AfxBeginThread
ポインターと制御関数へのパラメーターを渡します。 ワーカー スレッドとユーザー インターフェイス スレッドの両方で、優先度、スタック サイズ、作成フラグ、およびセキュリティ属性を変更する省略可能なパラメーターを指定できます。 AfxBeginThread
は、新しい CWinThread
オブジェクトへのポインターを返します。
呼び出すAfxBeginThread
代わりに、-derived オブジェクトをCWinThread
構築し、次に .CreateThread
この 2 段階の構築方法は、連続する作成とスレッド実行の終了の間で CWinThread
オブジェクトを再利用する場合に便利です。
詳細については、「C++ と MFC を使用したマルチスレッド」、マルチスレッド: ユーザー インターフェイス スレッドの作成、マルチスレッド: ワーカー スレッドの作成、マルチスレッド: 同期クラスの使用方法に関CWinThread
する記事を参照してください。
継承階層
CWinThread
必要条件
ヘッダー:afxwin.h
CWinThread::CreateThread
呼び出し元プロセスのアドレス空間内で実行するスレッドを作成します。
BOOL CreateThread(
DWORD dwCreateFlags = 0,
UINT nStackSize = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
パラメーター
dwCreateFlags
スレッドの作成を制御する追加のフラグを指定します。 このフラグは、2 つの値の 1 つを含めることができます。
CREATE_SUSPENDED
中断カウントが 1 のスレッドを開始します。 スレッドの実行を開始する前に、オブジェクトのCWinThread
メンバー データ (派生クラスのメンバーなどm_bAutoDelete
) を初期化する場合に使用CREATE_SUSPENDED
します。 初期化が完了したら、スレッドの実行をCWinThread::ResumeThread
開始するために使用します。CWinThread::ResumeThread
が呼び出されるまでは、スレッドは実行されません。0 作成直後にスレッドを開始します。
nStackSize
新しいスレッドへのスタックのバイト サイズを指定します。 0 の場合、スタック サイズの既定値はプロセスのプライマリ スレッドと同じサイズになります。
lpSecurityAttrs
スレッドの SECURITY_ATTRIBUTES
セキュリティ属性を指定する構造体を指します。
戻り値
スレッドが正常に作成された場合は 0 以外。それ以外の場合は 0。
解説
スレッド オブジェクトを作成し、1 つの手順で実行するために使用 AfxBeginThread
します。 スレッド実行の連続した作成と終了の間にスレッド オブジェクトを再利用する場合に使用 CreateThread
します。
CWinThread::CWinThread
CWinThread
オブジェクトを構築します。
CWinThread();
解説
スレッドの実行を開始するには、メンバー関数を CreateThread
呼び出します。 通常は、このコンストラクターを呼び出す呼び出し AfxBeginThread
によってスレッドを作成します CreateThread
。
CWinThread::ExitInstance
ほとんどオーバーライド Run
されないメンバー関数内からフレームワークによって呼び出され、スレッドのこのインスタンスを終了するか、呼び出し InitInstance
が失敗した場合に呼び出されます。
virtual int ExitInstance();
戻り値
スレッドの終了コード。0 はエラーがないことを示し、0 より大きい値はエラーを示します。 この値は、呼び出 GetExitCodeThread
すことによって取得できます。
解説
メンバー関数内の任意の場所からこのメンバー関数を Run
呼び出さないでください。 このメンバー関数は、ユーザー インターフェイス スレッドでのみ使用されます。
この関数の既定の実装では、次の場合m_bAutoDelete
TRUE
にオブジェクトがCWinThread
削除されます。 スレッドが終了したときに追加のクリーンを実行する場合は、この関数をオーバーライドします。 実装では、コードの ExitInstance
実行後に基底クラスのバージョンを呼び出す必要があります。
CWinThread::GetMainWnd
アプリケーションが OLE サーバーの場合は、この関数を呼び出して、アプリケーション オブジェクトのメンバーを直接参照するのではなく、アプリケーションのアクティブなメイン ウィンドウへのm_pMainWnd
ポインターを取得します。
virtual CWnd* GetMainWnd();
戻り値
この関数は、2 種類のウィンドウのいずれかを指すポインターを返します。 スレッドが OLE サーバーの一部であり、アクティブなコンテナー内でインプレース アクティブなオブジェクトがある場合、この関数はオブジェクトのデータ メンバーをCWinThread
返CWinApp::m_pActiveWnd
します。
コンテナー内にインプレース アクティブなオブジェクトがない場合、またはアプリケーションが OLE サーバーでない場合、この関数はスレッド オブジェクトのデータ メンバーを返 m_pMainWnd
します。
解説
ユーザー インターフェイス スレッドの場合、これはアプリケーション オブジェクトのメンバーを直接参照することと m_pActiveWnd
同じです。
開発中のアプリケーションが OLE サーバーではない場合は、この関数を呼び出すことは、アプリケーション オブジェクトの m_pMainWnd
メンバーを直接参照することと同じです。
既定の動作を変更するには、この関数をオーバーライドします。
CWinThread::GetThreadPriority
このスレッドの現在のスレッド優先度レベルを取得します。
int GetThreadPriority();
戻り値
その優先度クラス内の現在のスレッドの優先度レベル。 返される値は、優先度が最も高いものから最も低いものまで、次のいずれかになります。
THREAD_PRIORITY_TIME_CRITICAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_IDLE
これらの優先順位の詳細については、Windows SDK を参照してください SetThreadPriority
。
CWinThread::InitInstance
InitInstance
は、ユーザー インターフェイス スレッドの各新しいインスタンスを初期化するためにオーバーライドする必要があります。
virtual BOOL InitInstance();
戻り値
初期化が成功した場合は 0 以外。それ以外の場合は 0。
解説
通常、オーバーライドして InitInstance
、スレッドの作成時に完了する必要があるタスクを実行します。
このメンバー関数は、ユーザー インターフェイス スレッドでのみ使用されます。 渡される AfxBeginThread
制御関数でワーカー スレッドの初期化を実行します。
CWinThread::IsIdleMessage
特定のメッセージが生成された後に呼び出されないようにするには OnIdle
、この関数をオーバーライドします。
virtual BOOL IsIdleMessage(MSG* pMsg);
パラメーター
pMsg
処理中の現在のメッセージを指します。
戻り値
メッセージの処理後に呼び出す必要がある場合 OnIdle
は 0 以外、それ以外の場合は 0。
解説
既定の実装では、カレットの点滅によって生成された冗長なマウス メッセージとメッセージの後には呼び出 OnIdle
されません。
アプリケーションが短いタイマーを作成した場合、 OnIdle
頻繁に呼び出され、パフォーマンスの問題が発生します。 このようなアプリケーションのパフォーマンスを向上させるには、アプリケーションの CWinApp
-derived クラスでオーバーライドIsIdleMessage
して、メッセージを次のようにチェックWM_TIMER
します。
BOOL CMyWinApp::IsIdleMessage(MSG* pMsg)
{
if (!CWinApp::IsIdleMessage(pMsg) || pMsg->message == WM_TIMER)
return FALSE;
else
return TRUE;
}
この方法で処理 WM_TIMER
すると、短いタイマーを使用するアプリケーションのパフォーマンスが向上します。
CWinThread::m_bAutoDelete
スレッドの終了時に CWinThread
オブジェクトを自動的に削除するかどうかを指定します。
BOOL m_bAutoDelete;
解説
m_bAutoDelete
データ メンバーは、BOOL 型のパブリック変数です。
値 m_bAutoDelete
は、基になるスレッド ハンドルの閉じ方には影響しませんが、ハンドルを閉じるタイミングには影響します。 スレッド ハンドルは、CWinThread
オブジェクトが破棄されるときに必ず閉じられます。
CWinThread::m_hThread
これに CWinThread
アタッチされているスレッドへのハンドル。
HANDLE m_hThread;
解説
データ メンバーは m_hThread
、型 HANDLE
のパブリック変数です。 基になるカーネル スレッド オブジェクトが現在存在し、ハンドルがまだ閉じていない場合にのみ有効です。
デストラクターでCWinThread
呼び出されますCloseHandle
m_hThread
。 TRUE
スレッドが終了した場合m_bAutoDelete
、CWinThread
オブジェクトは破棄され、オブジェクトとそのメンバー変数へのCWinThread
ポインターが無効になります。 スレッド終了値をm_hThread
チェックしたり、シグナルを待機したりするメンバーが必要になる場合があります。 スレッドのCWinThread
実行中および終了後にオブジェクトとそのm_hThread
メンバーを保持するには、スレッドの実行をFALSE
続行する前に設定m_bAutoDelete
します。 それ以外の場合は、スレッドを終了し、オブジェクトを CWinThread
破棄し、ハンドルを閉じてから使用を試みることがあります。 この手法を使用する場合は、オブジェクトを削除する CWinThread
必要があります。
CWinThread::m_nThreadID
これに CWinThread
アタッチされているスレッドの ID。
DWORD m_nThreadID;
解説
データ メンバーは m_nThreadID
、型 DWORD
のパブリック変数です。 基になるカーネル スレッド オブジェクトが現在存在する場合にのみ有効です。
有効期間に関する m_hThread
解説も参照してください。
例
AfxGetThread
の例を参照してください。
CWinThread::m_pActiveWnd
このデータ メンバーを使用して、スレッドのアクティブ ウィンドウ オブジェクトへのポインターを格納します。
CWnd* m_pActiveWnd;
解説
Microsoft Foundation クラス ライブラリは、参照されるウィンドウが閉じられると、スレッドを自動的に m_pActiveWnd
終了します。 このスレッドがアプリケーションのプライマリ スレッドである場合、アプリケーションも終了します。 このデータ メンバーが存在する場合、 NULL
アプリケーションのオブジェクトの CWinApp
アクティブ ウィンドウが継承されます。 m_pActiveWnd
は型 CWnd*
のパブリック変数です。
通常は、オーバーライド InitInstance
するときにこのメンバー変数を設定します。 ワーカー スレッドでは、このデータ メンバーの値は親スレッドから継承されます。
CWinThread::m_pMainWnd
このデータ メンバーを使用して、スレッドのメイン ウィンドウ オブジェクトへのポインターを格納します。
CWnd* m_pMainWnd;
解説
Microsoft Foundation クラス ライブラリは、参照されるウィンドウが閉じられると、スレッドを自動的に m_pMainWnd
終了します。 このスレッドがアプリケーションのプライマリ スレッドである場合、アプリケーションも終了します。 このデータ メンバーが存在する場合はNULL
、アプリケーションのオブジェクトのCWinApp
メイン ウィンドウを使用して、スレッドを終了するタイミングを決定します。 m_pMainWnd
は型 CWnd*
のパブリック変数です。
通常は、オーバーライド InitInstance
するときにこのメンバー変数を設定します。 ワーカー スレッドでは、このデータ メンバーの値は親スレッドから継承されます。
CWinThread::OnIdle
アイドル時間処理を実行するには、このメンバー関数をオーバーライドします。
virtual BOOL OnIdle(LONG lCount);
パラメーター
lCount
スレッドのメッセージ キューが空のときに、毎回 OnIdle
インクリメントされるカウンターが呼び出されます。 この数は、新しいメッセージが処理されるたびに 0 にリセットされます。 このパラメーターを lCount
使用すると、メッセージを処理せずにスレッドがアイドル状態になった時間の相対的な長さを判断できます。
戻り値
より多くのアイドル処理時間を受信する場合は 0 以外。これ以上アイドル処理時間が必要ない場合は 0。
解説
OnIdle
は、スレッドのメッセージ キューが空の場合に、既定のメッセージ ループで呼び出されます。 オーバーライドを使用して、独自のバックグラウンド アイドル ハンドラー タスクを呼び出します。
OnIdle
は、追加のアイドル処理時間が不要であることを示す 0 を返す必要があります。 パラメーターは lCount
、メッセージ キューが空のときに呼び出されるたびにインクリメント OnIdle
され、新しいメッセージが処理されるたびに 0 にリセットされます。 この数に基づいて、異なるアイドル ルーチンを呼び出すことができます。
このメンバー関数の既定の実装では、一時オブジェクトと未使用のダイナミック リンク ライブラリがメモリから解放されます。
このメンバー関数は、ユーザー インターフェイス スレッドでのみ使用されます。
アプリケーションは戻るまで OnIdle
メッセージを処理できないため、この関数では長いタスクを実行しないでください。
CWinThread::operator HANDLE
オブジェクトのハンドルを CWinThread
取得します。
operator HANDLE() const;
戻り値
成功した場合は、スレッド オブジェクトのハンドル。それ以外の場合は . NULL
解説
ハンドルを使用して Windows API を直接呼び出します。
CWinThread::PostThreadMessage
ユーザー定義メッセージを別 CWinThread
のオブジェクトに投稿するために呼び出されます。
BOOL PostThreadMessage(
UINT message,
WPARAM wParam,
LPARAM lParam);
パラメーター
message
ユーザー定義メッセージの ID。
wParam
最初のメッセージ パラメーター。
lParam
2 番目のメッセージ パラメーター。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
投稿されたメッセージは、メッセージ マップ マクロ ON_THREAD_MESSAGE
によって適切なメッセージ ハンドラーにマップされます。
Note
呼び出 PostThreadMessage
すと、メッセージはスレッドのメッセージ キューに配置されます。 ただし、この方法で投稿されたメッセージはウィンドウに関連付けられていないため、MFC はメッセージまたはコマンド ハンドラーにディスパッチしません。 これらのメッセージを処理するには、-derived クラスの関数をCWinApp
オーバーライドPreTranslateMessage()
し、メッセージを手動で処理します。
CWinThread::PreTranslateMessage
Windows 関数にディスパッチされる前にウィンドウ メッセージをフィルター処理するには、この関数 TranslateMessage
をオーバーライドします DispatchMessage
。
virtual BOOL PreTranslateMessage(MSG* pMsg);
パラメーター
pMsg
処理するメッセージを MSG
含む構造体 を指します。
戻り値
メッセージが完全に処理され PreTranslateMessage
、それ以上処理すべきでない場合は 0 以外。 メッセージを通常の方法で処理する必要がある場合は 0。
解説
このメンバー関数は、ユーザー インターフェイス スレッドでのみ使用されます。
CWinThread::ProcessMessageFilter
フレームワークのフック関数は、このメンバー関数を呼び出して、特定の Windows メッセージをフィルター処理して応答します。
virtual BOOL ProcessMessageFilter(
int code,
LPMSG lpMsg);
パラメーター
code
フック コードを指定します。 このメンバー関数は、コードを使用して処理 lpMsg
方法を決定します。
lpMsg
Windows MSG
構造体へのポインター。
戻り値
メッセージが処理される場合は 0 以外。それ以外の場合は 0。
解説
フック関数は、アプリケーションの通常のメッセージ処理に送信される前にイベントを処理します。
この高度な機能をオーバーライドする場合は、必ず基底クラス バージョンを呼び出して、フレームワークのフック処理をメインします。
CWinThread::ProcessWndProcException
フレームワークは、ハンドラーがスレッドのメッセージまたはコマンド ハンドラーのいずれかでスローされた例外をキャッチしない場合に常に、このメンバー関数を呼び出します。
virtual LRESULT ProcessWndProcException(
CException* e,
const MSG* pMsg);
パラメーター
e
ハンドルされない例外を指します。
pMsg
フレームワークが例外を MSG
スローする原因となった Windows メッセージに関する情報を含む構造体 を指します。
戻り値
例外が生成された場合 WM_CREATE
は -1。それ以外の場合は 0。
解説
このメンバー関数を直接呼び出さないでください。
このメンバー関数の既定の実装では、次のメッセージから生成された例外のみが処理されます。
コマンド | アクション |
---|---|
WM_CREATE |
失敗。 |
WM_PAINT |
影響を受けるウィンドウを検証し、別 WM_PAINT のメッセージが生成されないようにします。 |
例外のグローバル処理を提供するには、このメンバー関数をオーバーライドします。 既定の動作を表示する場合にのみ、基本機能を呼び出します。
このメンバー関数は、メッセージ ポンプがあるスレッドでのみ使用されます。
CWinThread::PumpMessage
スレッドのメッセージ ループを格納します。
virtual BOOL PumpMessage();
解説
PumpMessage
にはスレッドのメッセージ ループが含まれています。 PumpMessage
は、スレッドのメッセージをポンプするために CWinThread
呼び出されます。 メッセージを強制的に処理するために直接呼び出 PumpMessage
すか、オーバーライド PumpMessage
して既定の動作を変更できます。
直接呼び出 PumpMessage
して既定の動作をオーバーライドすることは、上級ユーザーにのみ推奨されます。
CWinThread::ResumeThread
メンバー関数によって中断されたスレッド、またはフラグを使用して SuspendThread
作成されたスレッドの実行を CREATE_SUSPENDED
再開するために呼び出されます。
DWORD ResumeThread();
戻り値
成功した場合のスレッドの前の中断カウント。 0xFFFFFFFF
それ以外の場合。 戻り値が 0 の場合、現在のスレッドは中断されませんでした。 戻り値が 1 の場合、スレッドは中断されましたが、現在は再起動されます。 戻り値が 1 より大きい場合は、スレッドが中断メインを意味します。
解説
現在のスレッドの中断数が 1 つ減ります。 中断回数が 0 に減ると、スレッドは実行を再開します。それ以外の場合は、スレッドが中断メイン。
CWinThread::Run
ユーザー インターフェイス スレッドの既定のメッセージ ループを提供します。
virtual int Run();
戻り値
int
スレッドによって返される値。 この値は、呼び出 GetExitCodeThread
すことによって取得できます。
解説
Run
は、アプリケーションがメッセージを受信するまで Windows メッセージを WM_QUIT
取得してディスパッチします。 スレッドのメッセージ キューに現在メッセージが含まれている場合は、 Run
アイドル時間処理を実行する呼び出し OnIdle
。 受信メッセージは、特別な処理のためにメンバー関数に移動し、標準のキーボード変換用の Windows 関数TranslateMessage
に移動PreTranslateMessage
します。 最後に、 DispatchMessage
Windows 関数が呼び出されます。
Run
がオーバーライドされることはほとんどありませんが、特別な動作を実装するためにオーバーライドできます。
このメンバー関数は、ユーザー インターフェイス スレッドでのみ使用されます。
CWinThread::SetThreadPriority
この関数は、その優先度クラス内の現在のスレッドの優先度レベルを設定します。
BOOL SetThreadPriority(int nPriority);
パラメーター
nPriority
その優先度クラス内の新しいスレッド優先度レベルを指定します。 このパラメーターは、優先順位が最も高いものから最も低いものまで、次のいずれかの値である必要があります。
THREAD_PRIORITY_TIME_CRITICAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_IDLE
これらの優先順位の詳細については、Windows SDK を参照してください SetThreadPriority
。
戻り値
関数が成功した場合は 0 以外。それ以外の場合は 0。
解説
正常に戻った後 CreateThread
にのみ呼び出すことができます。
CWinThread::SuspendThread
現在のスレッドの中断カウントをインクリメントします。
DWORD SuspendThread();
戻り値
成功した場合のスレッドの前の中断カウント。 0xFFFFFFFF
それ以外の場合。
解説
いずれかのスレッドに 0 を超える中断カウントがある場合、そのスレッドは実行されません。 スレッドは、メンバー関数を ResumeThread
呼び出すことによって再開できます。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示