掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
FMX-TBitmapはThread-safe? (ID:151803)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
投稿するかどうか少し迷ったのですが、最近気になってたので敢えて投稿しました。 前提として、TokyoあたりからFMX-TBitmapはThread-safeとの認識があります。 やってることは、バックグラウンド・スレッド内でネットにアクセスして画像ファイルを取得し。これをTBitmapにロードし、場合によっては少々加工し、Synchronizeを使ってUIスレッドでTImage.Bitmapに割り当てて表示するという単純なものです。ファイル取得は数秒間隔でトリガされ、24時間/365日の連続運用を前提としています。 TTask.Run(procedure begin HTTPClient.Get(URL, Stream); Bitmap.LoadFromStream(Stream); // 必要であれば加工 ... // UI更新 TThread.Synchronize(nil, procedure begin Image1.Bitmap := Bitmap; end); end); Delphi 11.4(CE)では長期間運用でもとくに問題なかったんですが、Delphi 12.1(CE)でBuildすると、数時間もするとエラーが発生してしまいます。どうもTBitmapに関連してTMessageManagerやTMonitor関連でアクセスエラーが発生しているようです。 ネットで検索すると、多くの場合にFMX-TBitmapはThread-safeではないとの見解がちらほら。 ネットの上のアドバイスに従って、コードはそのままでSkiaに変えることで、エラーは皆無になりました(Skia自体、コントロールやPlattformによって、少々表示上の不具合があるのですが、対処できる範囲なのでOKということで)。 GlobalUseSkia := True; GlobalSkiaBitmapsInParallel := True; ①そもそもFMX-TBitmapはThread-safeではない? ②Thread-safeだが、使い方が悪い? ③Delphi 12.1固有のの問題? よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.