私はSDLを使用していますが、可能であれば他のライブラリ(pthread、boost_thread ...)を使用したソリューションを受け入れます。私はクラスを持っています:
class c_image
{
public:
bool _flag_thread;
int _id;
void load (void);
private:
int thread_func (void*);
}
c_image::load (void)
{
SDL_Thread* thread_1;
if (flag_thread)
thread_1 = SDL_CreateThread (c_image::thread_func, NULL);
else
thread_func (NULL);
}
c_image::thread_func (void* data)
{
_id = 1;
....
return 0;
}
問題は、flag_thread
false の場合thread_func
、通常の関数のように実行され、正常に動作することですflag_thread
が、 true の場合、別のスレッドでその呼び出しが必要であり、その方法がわかりません。SDL_CreateThread
エラーを返す行。メソッドのスレッドが必要なのは、内部でそのthread_func
ような要素を変更する必要があるためです。そのような要素_id
はクラスのメンバーであり、クラスの外部でスレッドを作成すると、にアクセスできません_id
。
ありがとう。
編集:これは私が今持っている方法であり、それを機能させる方法が見つかりません:
class c_image
{
public:
bool _flag_thread;
int _id;
void load (void);
private:
static int thread_func_wrapper (void* data);
int thread_func (void);
}
void c_image::load (void)
{
SDL_Thread* thread_1;
if (flag_thread)
thread_1 = SDL_CreateThread (thread_func_wrapper, NULL, this);
else
thread_func();
}
int c_image::thread_func_wrapper (void* data)
{
c_image* self = static_cast<c_image*>(data);
return self->thread_func();
}
int c_image::thread_func (void)
{
printf ("id: %d", _id);
....
return 0;
}
今ではうまく機能しているようです。私はテストを続けます。どうもありがとうございます!