void sqlite_progress_handler(sqlite*, int, int(*)(void*), void*);
sqlite.h に解説されていますが,この関数を使って sqlite に progress_handler を指定すると,任意の時点でクエリーをキャンセルすることが可能となる.
GUI を持つアプリケーションなどで進捗状況を提示する際に利用したり,クエリーの中止などが実装できる.
これを使って PssEditor の QuickFinder に「新しい文字列が指定されたので現在実行中のクエリーは中止して新しい文字列でクエリーしてちょうだいな」処理を組み込みます.
View - QuickFinder - SearchThread +-------->| request | create new thread | querying... +-------->| new request +------------>| stop/new query msg | in progress_handler, catch the msg, then stop current query and make new query. | querying... | have result. |<------------+ send back the result.
こんな感じで作りましょう.