見出し画像

C++20 コルーチンでテーブルページング

前回記事でテーブルページングの遅さが気になって改善を試みました。

テーブルの初期化に時間がかかっていたみたいです。

最初の待ち時間以外はコルーチンでオブジェクトを初期化してページング時にプロミスオブジェクトからテーブルのオブジェクトを取得しました。

初期化は現在のページを中心に順番に行います。

多分1フレームあたり1ページずつ初期化します。FPSが60なら1秒あたり60ページになります。

1000ページだと16秒ぐらいかかる計算です。


コルーチンはC++20から追加された機能です。

結構新しめの機能です。

プロミスオブジェクトを定義して大抵は別スレッドで処理させます。この処理をコルーチンと呼びます。

何がいいかと言いますと資源プロミスオブジェクトをスレッド間でミューテックスなしでやりとりできます。

細かいことは解説本を読みたいが、英語しか見当たらないので解説できません。

つまづいたところはプロミスオブジェクトにテンプレート使ったときのエラーメッセージでほぼ情報が出ないことです。

<any>::promise_typeがありません。と出てくるだけです。

これが出たら、いったんテンプレート外しましょう。

そしたら、コンパイルできなかった箇所がちゃんとメッセージ出てきます。

そのあとテンプレート化したらいけました。

ついでにハイライト機能もつけました。


いいなと思ったら応援しよう!