最近のインタビューで興味深い質問がありました。
関数ポインターと時間間隔を受け入れる関数を実装する必要があります。そして、func1
every を呼び出せるようにする必要がありますtime_interval
。
クロック ティックごとに呼び出される API が提供されます。create_timer への複数の呼び出しが存在する可能性があります。その場合、それぞれの時間間隔に従って各関数ポインターを呼び出す必要があります。
// api
create_timer(&func, interval)
// call to api would look like
create_timer(&func1, 10);
create_timer(&func2, 5);
関数ポインターのリンクされたリストを作成することを提案しましたが、その場合、すべてのクロックティックの線形検索になります。それは良い解決策ではありません。
プライオリティ キュー ソリューションも提案しましたが、うまくいきませんでした。すべての関数で create_timer が呼び出された時刻を保存し、現在時刻との差を計算し、その差が time_interval の倍数である場合は、関数を呼び出す必要があります。
興味深い解決策はありますか?