![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
ひな形です。
適当にかいたのでこのままでは動かないので、ご参考に。
ポイントは
・スレッドはstaticな関数にする必要がある。
・スレッド生成時に this ポインタを渡す。
・スレッド関数内では、直接メンバー変数、関数にアクセスできない
(この例では that ポインタ経由でアクセスしています)
class ClassA
{
public:
void fnc() { _hThread = ::beginthreadex(threadfnc, this); }
void wait() { ::WaitForSingleObject( _hThread, INFINITE ); }
protected:
static int threadfnc( void* pParam )
{
ClassA* that = (ClassA*)pParam;
that->_x = 0; // that経由でメンバーにアクセス
that->fnc2();
::endreadex(0);
return 0;
}
void fnc2() {}
int _x;
HANDLE _hThread;
}
main()
{
ClassA clsa;
clsa.fnc(); // スレッドを生成すると fnc はすぐに抜けてくる。
// この間にメインスレッドはCPU資源が空いている。
clsa.wait(); // スレッドの終了待ち
}
実際のコードでは、排他処理、二重起動防止、デストラクタでのスレッドの終了など検討が必要になります。
No.2
- 回答日時:
static なメソッドなら普通に _beginthread や _beginthreadex を使用すればいいと思いますが、
static でないメソッドなら、_beginthread や _beginthreadex の arglist ( 末尾のリンク先を参照 ) として &clsa を渡し、呼ばれたスレッドで
unsigned int foo( void *p )
{
ClassA *pca = ( ClassA * )p;
pca->fnc();
return 0;
}
などのようにして fnc() を呼び出してはどうでしょうか。
参考URL:http://msdn.microsoft.com/ja-jp/library/kdzttdcb …
No.1
- 回答日時:
なにがわからんのかわからんのですが:
#include <Windows.h>
#include <iostream>
using namespace std;
class ClassA {
public:
void fnc() {
for ( int i = 0; i < 10; ++i ) cout << "fnc " << flush;
}
};
DWORD WINAPI entry(LPVOID arg) {
ClassA clsa;
clsa.fnc();
return 0;
}
int main() {
DWORD thr;
HANDLE h = CreateThread(NULL, 0, &entry, NULL, 0, &thr);
cout << "wait thread's completion\n";
WaitForSingleObject(h, INFINITE);
CloseHandle(h);
cout << "\nthat's it\n";
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- 高校 学校のコロナについてです。 私の学校には系列というものがあって、クラスは同じ子でも、みんなそれぞれ受 4 2022/12/14 08:33
- Visual Basic(VBA) VBプロジェクトでのフォルダ構成について 1 2023/07/22 03:49
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
スレッドの安全な終了のさせ方
-
VC++スレッドの正しい終了のさ...
-
スレッド・アウェア(thread-awa...
-
スレッドの監視方法について
-
スレッドの終了はどうやるんで...
-
C++ GUIのメッセージループ。
-
マルチスレッド?
-
volatile の使い方
-
スレッドの名前の取得について
-
C言語で一定時間待機後、再実行
-
別スレッドからメインダイアロ...
-
LinuxでDoEvents()同等機能
-
Linuxでスレッド優先度って変え...
-
pthread_attr_tへの値の代入に...
-
マルチスレッドプログラミング...
-
マルチスレッドについて
-
マルチスレッドでの画像描画
-
Win32APIでのスレッド処理
-
VB2005 シリアル通信のClose処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++スレッドの正しい終了のさ...
-
WaitForSingleObjectの使い方に...
-
マイクロソフトedge で5チャン...
-
スレッドの安全な終了のさせ方
-
スレッドの終了はどうやるんで...
-
スレッドにて同一メモリの書き...
-
スレッドの監視方法について
-
マルチスレッドについて
-
スレッドの終了の仕方
-
Linuxでスレッド優先度って変え...
-
Windows上で、シグナル(SIGTERM...
-
LinuxでDoEvents()同等機能
-
VB2005 シリアル通信のClose処理
-
待機関数(WaitForMultipleObjec...
-
マルチスレッドプログラミング...
-
_beginthreadexで生成したスレ...
-
msec単位のWait Timerが作れない!
-
別スレッドからメインダイアロ...
-
マルチスレッドのスレッド数を...
-
.NetのBackgroundWorkerクラス...
おすすめ情報