したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

ソフトウェアに関する不具合、要望、感想

558tenteko:2020/05/03(日) 19:29:46 ID:BrCfT3Wc0
こんにちは。
別プロセスの作り方も教えてくださり、ありがとうございます。とても参考になりました。
まだあまり理解していないのですが、openSiv3D自体に子プロセス作成とパイプライン?の機能があるようで、
これを使えばもしかしたらもうちょっと簡単になるのかも…という気がしております。


>これは「x -hide <書庫名> -ir!<⑤ファイル名>」(もしくは-ir!なし)を指定しているということで間違いないでしょうか。

はい、そのとおりです。
アーカイブのサムネイル作成時に渡しているコマンドは次のようなものです。

x <書庫名> -ir!<⑤ファイル名> -hide

ちなみに、全解凍時に渡しているコマンドは次のようになっています。

x <書庫名> -hide


>処理手順や書庫について、もう少し情報をいただけるとありがたいです。

中断処理手順の概要を以下に記してみようと思います。

(1) まず、あるアーカイブ(7z)のサムネイル作成にとりかかります。
ここでは、SevenZipFindFirst()とSevenZipFindNext()で最初にヒットした画像ファイルを対象とし、
このファイルのみ解凍するため、上記の最初のコマンドラインでSevenZipExtractMemEx()を起動します。

(2) SevenZipExtractMemEx()実行中、任意のタイミングで中断指示を行います。
具体的には、中断指示 = グローバル変数の中断フラグをオンにして、
コールバック関数内でこれがオンの場合には return false するようにしています。

(3) 全解凍の場合は、殆どのケースで中断指示 → 間もなく return false → SevenZipExtractMemEx()終了となります。
しかし一部解凍の場合は、対象ファイルが処理されるまでに大きなファイルが有る場合は、
中断指示を出してもSevenZipExtractMemEx()終了までに時間がかかってしまうことがあります。


…今回、コールバック関数のメッセージの受信状況を調べてみました。
以下のテストファイル(interruptionTest.7z)を使って調べました(大きなサイズで恐縮です)。

ttps://18.gigafile.nu/0510-l69ad0d3859cb18f7f9171bcc91cc3e48

このファイルでは、解凍される順で①〜③までがサイズの大きいファイル、
④〜⑥が画像ファイルとなっています。

解凍対象となるのは④(test01.png)です。

SevenZipExtractMemEx()が実行されましたら、メッセージは次の順序で送られていました。

(1) ARCEXTRACT_OPEN(interruptionTest.7z)
…(長いインターバル)…
(2) ARCEXTRACT_BEGIN(interruptionTest\\test01.png)
(3) ARCEXTRACT_INPROCESS(interruptionTest\\test01.png)
(4) ARCEXTRACT_END

となりますと、中断フラグを上記「長いインターバル」の間にオンにしたとしても、
メッセージが送られてこないことには return false しようがない、
よって、(2)まで待たなければ中断ができない、ということになっていたようでした。

…毎回お手数をおかけします…。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板