我正在尝试编写一个函数,给定秒数和回调,在给定的秒数后运行回调。回调不必在同一个线程上。目标语言是 C++/CX。
我尝试使用 Windows::System::Threading::ThreadPoolTimer,但结果是内存访问异常。问题似乎是无法从计时器正在运行其回调的托管线程访问回调实现(在本机 C++ 中)。
ref class TimerDoneCallback {
private:
function<void(void)> m_callback;
public:
void EventCallback(ThreadPoolTimer^ timer) {
m_callback(); // <-- memory exception here
}
TimerDoneCallback(function<void(void)> callback) : m_callback(callback) {}
};
void RealTimeDelayCall(const TimeSpan& duration, function<void(void)> callback) {
auto t = ref new TimerDoneCallback(callback);
auto e = ref new TimerElapsedHandler(t, &TimerDoneCallback::EventCallback);
ThreadPoolTimer::CreateTimer(e, duration);
}
void Test() {
RealTimeDelayCall(duration, [](){}); //after a delay, run 'do nothing'
}
我不想创建一个线程并在其上休眠,因为可能会有很多并发延迟。