メンバ関数をスレッド関数とするには? – プログラミング – Home

メンバ関数をスレッド関数とするには?
 
通知
すべてクリア

[解決済] メンバ関数をスレッド関数とするには?


とまと
 とまと
(@とまと)
ゲスト
結合: 25年前
投稿: 1
Topic starter  

メンバ関数をスレッド関数にしたいのですが,
CreateTHreadかんすうの3番目の引数(関数へのポインタ)
の型が違うとはじかれます。
どうすればコンパイルできますか?

下に動かなかったサンプルをのせました.

class CThreadBase{
private:
HANDLE hthread;
DWORD threadID;

int ThreadFunc(int par){
cout << func : << par << endl;
return 0;
}
public:
CThreadBase(){
hthread = NULL;
}
~CThreadBase(){}

int StartThread(){ // a constructor for thread
// initialization process
if(hthread == NULL){
hthread = CreateThread(
NULL,
0,
(LPTHREAD_START_ROUTINE) ThreadFunc,
5,
0,
&threadID
);
}
return 0;
}
int StopThread(){
TerminateThread(hthread,0);
hthread = NULL;

return 0;
}
};

int main(int argc, char* argv[]){
CThreadBase th;
th.StartThread();
Sleep(1000);
th.StopThread();

return 0;
}


引用未解決
トピックタグ
おきゅとぱす
 おきゅとぱす
(@おきゅとぱす)
ゲスト
結合: 25年前
投稿: 15
 

はじめまして、おきゅとぱすというものです。

結論から言うとCreateThreadの引数にクラスのメンバ関数を指定することはできません。
そもそも、引数が違ってしまいます。
というのは、クラスのメンバ関数ではthisポインタが暗黙のうちに、
引数の1つとして渡されてしまうからです。

どうしてもメンバ関数を渡したいのなら
static関数にすればCreateThreadにも渡すことができます。
もちろん、このときはthisポインタが必要になるようなメンバへの参照はできません。

といったところでどうでしょうか?


返信引用
とまと
 とまと
(@とまと)
ゲスト
結合: 25年前
投稿: 1
 

適切なアドバイスありがとうございました。
言われたとおり、引数の問題でした。

ついでに、メンバ変数の参照にはスレッド関数の引数に
thisポインタを指定してやれば
this->m_メンバ
のように参照することができます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました