一般に、あるクラスを継承するクラスがあり、そのクラスのインスタンスが実行終了後に自動的に割り当てを解除Threadされるようにしたい場合、delete this
具体例:
私のアプリケーションには、 という1 つのメソッドを持つTimerクラスがあります。ユーザーは次のように呼び出します。staticschedule
Timer::schedule((void*)obj, &callbackFunction, 15); // call callbackFunction(obj) in 15 seconds
このscheduleメソッドはTaskオブジェクトを作成します (目的は Java TimerTask オブジェクトに似ています)。Taskクラスはクラスに対するprivateものであり、Timerクラスから継承しますThread(pthreads で実装されます)。したがって、scheduleメソッドはこれを行います:
Task *task = new Task(obj, callback, seconds);
task->start(); // fork a thread, and call the task's run method
コンストラクターはTask、新しいスレッドで使用するために引数を保存します。新しいスレッドでは、タスクのrunメソッドが次のように呼び出されます。
void Timer::Task::run() {
Thread::sleep(this->seconds);
this->callback(this->obj);
delete this;
}
task新しいスレッドが必要とするため、オブジェクトをスタック割り当てオブジェクトにすることはできないことに注意してください。また、他の人が使用できないようにTaskクラスprivateをTimerクラスにしました。
Taskオブジェクトを削除するということは、基になるオブジェクトを削除することを意味するため、特に心配していThreadます。Threadオブジェクトの唯一の状態はpthread_t変数です。これが戻ってきて私を噛む方法はありますか?メソッドが終了pthread_tした後は変数を使用しないことに注意してください。run
(メソッドへの引数またはコンストラクター内の何かdelete thisを介して) ある種の状態を導入することにより、呼び出しをバイパスすることができます。これは、メソッドを呼び出しているオブジェクトに対してフォークされるメソッドであることを示します。ただし、コードはそのまま動作するようです。Thread::startThreaddeleterun
何かご意見は?