0

X時間後に別の関数を実行するために、この関数を作成しようとしています:

void            execAfter(double time, void *(*func)(void *), t_params *params);

スレッドのカプセル化と時間のカプセル化 (オブジェクトのスレッドと時間) を作成しました。

疑似コードでやりたいこと:

Call execAfter
  instantiate Thread
  call thread->create(*funcToExec, *params, timeToWait)
[inside thread, leaving execAfter]
  instanciate Time object
  wait for X time
  exec funcToExec
  delete Time object
[leaving thread, back to execAfter]
  delete Thread object              <---- probleme is here, see description below.
  return ;

残りの実行をブロックしたり、必要な時間が経過する前に削除するリスクを冒したりせずに、Thread オブジェクトを適切に削除するにはどうすればよいですか。

私はかなり迷っています。

4

1 に答える 1

1

std::threadlambdasを使用すると、次のようにすることができます。

void execAfter(const int millisecs, std::function<void(void*)> func, void* param)
{
    std::thread thread([=](){
        std::this_thread::sleep_for(std::chrono::milliseconds(millisecs));
        func(param);
    });

    // Make the new thread "detached" from the parent thread
    thread.detach();
}

あなたが探している「魔法」はdetachコールです。

于 2013-05-15T11:31:29.760 に答える