2025年7月30日水曜日

小ネタ



 元米軍パイロットがバードストライクしたタイフーンの写真を見ながら思い出を語ったりとか。バードストライクってそれなりにあるんだな。もっと稀なものだと思ってた。

『アポロ18号の殺人』の序盤で、バードストライクで鳥がF-4のキャノピーを貫通するシーンがあるけど、実際に起きるんだな。



 西川善司の3DGE:最新の技術やテクニックがてんこ盛りだった「アサシン クリード シャドウズ」のグラフィックスの秘密


 こういうエンジン周りとかの話結が構好きなので、CGWORLDのゲームグラフィックスとかたまに買って読んでたけど、最近売ってないのが残念。そもそもCGWORLDがCGアニメとかの話題ばっかりでゲームはあんまり特集していない気がする。と思ってバックナンバーを見てみたら、年2回くらいはゲームの特集してるのか。また売って欲しいなー。



『バトルフィールド6(Battlefield 6)』ついに映像公開。マルチプレイモードが8月1日にお披露目へ - AUTOMATON

 FPSのシリーズ作品で現代が舞台で一人でも遊べる新作ってかなり久しぶりじゃない? BFは世界大戦あたりが続いていた気がするし、CoDもブラックオプスの続編かMWのリメイクか、といった感じだった気がするし。

 しかし、BFシリーズってあんまり好きじゃないのよな。一部のシナリオもそうだし、3D酔いしやすい気がするし。とはいえ久しぶりの一人で遊べる現代戦FPSだし、興味はある。しかし、フルプライス1万円弱で販売したところで、その大部分はマルチプレイ用の開発費に吸収されて、シナリオモードは二千円分くらいの出来なんだろうなぁ。それでもインディーゲームに比べれば使えるアセット(開発体制含め)が桁違いだから、ちゃんと作ってあれば面白いんだろうけど。

 BF3はF/A-18のミッションが大嫌いでなぁ。。。BF4は遊んだけど、あんまり印象にないな。たぶんこのあたりでコンソールをあまり遊ばなくなって、それに呼応するようにXbox One Xが故障したはず(実際はXboxの電源周りが劣化して安定性が悪化して遊ばなくなった、というところだと思うけど)。BF1やBFVも同様。そういえばHLはPC版を買い直したけどほとんど遊んでないや。

 ソロとマルチで遊べるゲーム、ソロ/マルチ片方しか遊ばない人向けに片方だけのライセンスを売ってくれないかなぁ。まあ、だからこその抱き合わせ販売なんだろうけど。



 Shipping to Japan? - General Topics - Framework Community

「日本で売るには日本語のロゴを作らなくちゃいけないからコストがかかるんだよ」

「いや、日本メーカーが日本で売るときもロゴはアルファベットだから問題ないよ」

 みたいな話が出てくる。確かに富士通とか東芝もロゴは英語表記だよな。もちろん日本電気も。BIOSについても同じような議論がある(日本語化する必要がある、いや日本人も英語BIOSを使うよ)。

 むしろTESTEDチームがカタカナで「テステド」と書いてあるステッカーを売っていたりするから、日本語ロゴや日本語BIOSは英語圏のギークに若干の人気がありそうな気がする。そして、Frameworkのユーザーはそういう人たちが多そう。

 日本語化云々は置いておいて、英語のままでもいいから(せめてOSの言語は届いてからでもいいから日本語化したいけど)日本でも売って欲しいよなー。WiFi/BluetoothモジュールはIntel製のやつで技適マークも本体に貼ってあるんだから、あまり苦労せずに売れると思うんだけど。サポート体制とかの問題はあるだろうけど、わざわざFrameworkを選ぶような人はそこまでサポートを要求するとも思えんのだが。とはいえ、製品を売るとなるとそういうわけにもいかないんだろうなぁ。せめてオンラインストアで日本から注文したら日本に届けてくれるだけでもありがたいんだけど、やっぱり精密機器ともなると配送の問題もあるだろうしなぁ。



 ゆるゆる古典教室 オタクは実質、平安貴族 | 栞葉 るり, 加藤 昌嘉 |本 | 通販 | Amazon

 ロケットや衛星が好きなら古典も勉強しないとな、ということで(いや、その古典じゃない)。

 かなり読みやすかった。現代オタク向けの感じの本だから万人向けというわけではないけど。挿絵も面白いし。



 最近ゲームのやり過ぎでFr24を見てても雲がかかっていたら「マップ開放にいかなきゃ……」とか思うようになってきたのでやばい。

 天気図を見て荒天が予想される地域に足を運んで祓うみたいなのはファンタジーな世界観のゲームで作れそう。そうでなくても、情報集約を行って祓魔を行うような時代であれば、日本地図の上に確率として雲がかかったような表示はやりそう。時代が下ると自宅でポテチを食べながらパソコンをポチポチしてドローンで祓ったりするようになるんだろうな……



 万博の大屋根リング、木材の体積は2.7万m³で、オリンピックプール10.8杯分くらいなんだそうだ。ATLAS-Iが同6.1杯分くらいだから、その1.8倍近い。ATLAS-Iはファスナーも木材を樹脂で補強したような材料を使っていて、金属を使わずに建設されているけど、大屋根リングはどうなんだろう。伝統構法の貫接合を発展させた、みたいな感じらしいし、主な構造部は金属(ボルトやブラケット等)を使わず、結合も含めて木材で作ってるのかな?


***


 僕が、情報を売る本の誤りに対して厳しいスタンスでいるのは、誤字を、その本の内容がどれくらいチェックされているか、という指標にしているから。

 平均的な日本人として(というか平均的な出版社として)「このくらいの誤りは気がついて当然だよね」というようなレベルの誤字や誤植が残っていると、「この本の中身は誰もチェックしていないんじゃないか」という懸念が生まれる。たとえそれが内容には無関係な、例えば単純な変換ミスとかだったとしても、そういうのが放置されているということは、それ以外の箇所(例えば重要な数値や文脈)もおそらく同様にチェックされていないだろう、というふうに考えている。だから、極端に間違いが多い本は、情報源としての信頼性を低く設定する。無論、数字や重要な記述が間違っていれば、さらに信頼性を下げて評価する。逆に、誤りが少ない本は(誤りが多い本に比べて)それだけ信頼度を高く設定している。

 専門書の内容(ある分野(or装置等)に固有だったり、専門的なロジックだったり)に対して出版社がチェックを行うのは難しいとしても、単純な変換ミスとか、あるいは算数みたいな内容(例えば35と182は量としてどちらが大きいか、とか)くらいは出版社側でもチェックして、おかしいと思ったら著者に確認をいれるくらいはやってほしい。

 そういうふうに見ているから、「内容に関係ない間違いは見逃してやれよ」みたいな意見には賛同できない(あくまでも僕がそう考えている、というだけであって、その人がどう思おうとその人の自由だが)。


 本業の人が作ったYouTubeの解説動画とかでも、あまりにも字幕の誤字が多いと、誰も中身をチェックしないで公開してるんだろうな、というふうに考えて、その動画の信頼性は低く設定している。あるいは、動画なら字幕は読まないで発言だけを参考にする、とかもできるけど。

 某わりとちゃんとしたところ(情報で商売している人たち)が出している動画の誤字が結構多くて、コメ欄で指摘したり、それに対して「大目に見ろよ」みたいなコメがあったりしたので、自分の考え方をちょっとまとめてみた次第。



 査読を受けた論文の信頼性が高いと考えられるのは、同じ分野(その分野に詳しい)かつ利害関係のない人物が内容を確認して、リジェクトするべき重大な瑕疵は発見されなかった、ということをチェックしているからだと思う。逆に、素人が思いつきで書いたブログとか、クリックベイトで稼ぐYouTubeチャンネルは、そういうチェックが無いから、信頼性は全く無い(少なくとも信頼できると考えられる出典が明記されていない限りは)。

 市販の本が信用されるのは、査読論文ほどではないにしても、ちゃんとした内容を記載していると信じられているからのはず。これは特に出版社が校閲作業を行っているという期待によるものが大きい。しかし、実際にはでたらめな内容が多く含まれている本も市販されている。

 そういう本を「いや、間違っているのは一部だけでしょ、それ以外の部分は採用してもいいじゃん」というスタンスで採用していいのか。僕はできればこのような本(or 複数の本でそういう傾向があるなら、その著者の著作全般)は信用するべきではないと思っている。一番の理由は、採用したいその記述が正しいか間違っているかを誰が判断するのか、という問題。採用したい人間が独自に判断するのは、その本を参考文献に使う意味がだいぶ薄くなる気がする。

 極論、様々な説がある分野では、自分に都合のいい内容が書かれているものだけを参考文献に採用して好きなストーリーを作れる可能性もある。一部の分野(業界)ではそもそも最初から中立性なんて無視して作りたいストーリーを作るために文献を探す、みたいなことをやっているような場所もあるだろうけど、例えばWikipediaみたいに可能な限り中立的な記事を書きたい場合に、誤りが多い本を採用すると、そもそも事実を書いてすらいない可能性が出てくる。

 可能であれば、誤っている情報(他の本と矛盾する記述)があまりにも多いと判断した本は、参考文献から除外すべきだと思う。例えば独立した3冊の本を比較して、1冊だけ極端に矛盾していて、残り2冊は矛盾が少ないなら、その1冊は除外して、残りの2冊を使うほうが誤りは少なくできるはず。ただ、この方法を使うには独立した複数の本を入手する必要があって、ただでさえニッチな分野だと参考文献を探すことすらままならない。そしてそういう分野ででたらめな内容を書く著者がいると、マジで大迷惑するわけだ。なので、出鱈目な内容を多く書く著者(特に比較がしづらいニッチな分野で)がいる場合は、声を大にして「この人の著作は間違ってる点が多すぎるぞ!」と叫びたいわけだ(本当に叫ぶ(比喩)かどうかは別として)。


 本とかとはまた違う話だけど、法人とか非営利団体とかでも、自分たちの専門分野の領域で誤字ったり間違った解説をしていたりしてると、対外的に文章を書く人は自社の専門分野に興味がないのかなぁ、と読んでて悲しくなる。

 就活で興味の無い分野の企業しか受からなくて、興味があって入った人が研究分野みたいな領域に行って、そういう場所に行けなかった人(その会社の分野に興味のない人)が広報とかに回されているのかなぁ、とか邪推したり。


***


 先日歯医者に行ってきた。今まで行ってたところとは別の歯科医院(ネガティブな理由で変えた訳ではない)。

 予約したときに3時に来いと言われたので3時ちょうどに行ったら、受付で「遅れるな、時間通りに来い」と怒られた。なんでェ。。。5分前行動が社会人の常識とかマナー講師みたいなこと言われたら黙るしかないけど、それにしたってわざわざ病院の受付で言われるようなことかな。何回も予約に30分とか1時間とか遅れるならともかく、1回目だぜ。それに言われた通りの時間に行ったのに。


 初診なのでレントゲンを(何回も)撮られた。前に行っていた歯科医院ではレントゲンを取るときは基本的に無人か、あるいはフィルムバッジをつけた院長が保護ベスト付きで撮影室に入っていた(建物は自体は古いので「現像室」もあった)。今回行った方も基本は無人での撮影だけど、何枚か院長が部屋に入って撮影して、院長は保護ベストなし、フィルムバッジ無しで撮ってた。それやって良いんか?

 比較的新しい歯科医院だから設備が新しくて、放射線の漏れやそもそもの線量が低いから問題ない、みたいなことなのかもしれないけど。とはいえ部屋はしっかりシールドしてあって、覗き窓も鉛ガラスで「何kV対応」みたいに書いてあるから、やっぱり放射線のリークはそれなりにあるはずなんだけどなぁ。建物は機材より古いとか、フィルムバッジは見える場所につけていないとか、色々考えられるけど。

 治療する場所においてあるPC(レントゲンを見るためのもの)のマウス等が結構汚れていたのも気になる。汚れてるってことはコンタミしてるってことよね。

 自分(患者側)も今回は保護ベストなしだけど、ぐぐってみると、患者側のベストの着用については「効果は殆どないしむしろない方がいい」というような方針らしい。


 2人で作業しているときに、作業者間での会話と患者に対する問いかけが同じ口調なのがちょっと気になる。今回行ったところは顔にタオルを乗せてくれるので、こっちを向いて話しているのか別の人と話しているのかを目で見て確認することができない(前行っていたところはタオルみたいな気の聞いたものはなかったので、誰と話しているのかは視線で一目瞭然だった)。

 あとは、問診票のフォーマットも、「はい」「いいえ」と、「いいえ」「はい(状態1)」「はい(状態2)」「はい(状態3)」みたいに並んでいて、質問の内容によって「いいえ」の場所が右側と左側で別れている、みたいなのもちょっと不便。


 あと、意訳すると「歯磨きだけじゃだめだぞ、食事毎に糸ようじ使えよ、それが嫌なら寝る前だけでも毎日糸ようじ使え」的なことを言われたので、しょうがないなぁ、と思って寝る前に糸ようじやってみたら、歯の隙間からなんか薄片出てきたんだけどなにこれ…… 紫外線を当てたら自分の歯とは違う蛍光を示すから、歯じゃなくて人為的に入れたものだと思うんだけど。

 しかし、歯医者に見られたら助走付きで殴られそうなことを書くけど、糸ようじってコスパ悪くね? 1日10分とか30分とかかけて毎日やって(毎食後ならその数倍)、それで歯石が減るくらいの効率なら、歯磨きだけやって年に何回か歯医者に行って除去してもらうほうが楽じゃね?

 時々海外のMakerが3Dプリンタとかで1発ですべての隙間をフロスできるジグを作って話題になる気がするけど、「食事後毎回やれ」とか言われて、試しに1回やってみると、そういうデバイスが欲しくなるのもわかるな。超絶面倒くさい。自分の場合歯の隙間が狭いからかなり力を入れないと糸が入っていかないから、その分でより面倒ってのもあるのかもしれないけど。

 翌日もう一度フロスしてみたら、ある場所では詰めてある部分が剥がれそうになるし、というか噛み合わせが悪くなってるから事実剥がれてきてるんだろうし、別の場所は入れたら抜けなくなったし、しょうがないので糸をハサミで切って口から出したら血で真っ赤になってるし。こんなのが歯の健康にいいだって!?



https://jsomfr.sakura.ne.jp/wp-content/uploads/2019/09/apron_guideline.pdf

「歯科エックス線撮影における防護エプロン使用についての指針」(2015)


***


 ファン付きベストみたいなやつって熱の仕事みたいな考え方をすると色々な考え方ができそう。

 一番単純なのはファンで外気を取り込んで汗を蒸発させることで熱を移動する。

 別の方法だと、ペルチェ素子みたいなもので気体の温度を下げて供給する。この場合、温度を下げることで飽和水蒸気量が減るから、水分を凝固させて除去すれば、より湿度の低い空気(より汗を蒸発させやすい空気)を供給できる。ただし気温が下がれば体感温度は下がるかもしれないけど、液体を蒸発させる能力も下がるから、一旦ペルチェで冷却した空気を再び何らかの熱交換(例えばペルチェの発熱側)で加温して、低湿・高温の空気で積極的に汗を蒸発させる方法も考えられる。

 どういう構成がいいんだろうな。ファン単体の製品が多いから、それがコスパ良いんだろうけど。


 vortex tubeで低温の空気を出す製品は、コンプレッサー側で除湿したうえに、高圧空気を膨張させて熱エネルギーをさげて、しかも渦で熱エネルギーに勾配を付けて低温側の空気だけを供給するから、vortex tubeを使う冷却服はかなり効率が良さそう。外部に高圧空気が必要なのが欠点。


 Copilot曰く、空気ボンベ(25MPa、25℃、4リットル)を1気圧(101.3kPa、25℃)に膨張させると、550kJくらいの吸熱になるらしい。150W/hくらいだから、活動時間を30分とすると300Wくらいを吸熱してくれる。

 空気ボンベはボンベの頭の部分にレギュレーターがあると思うけど、これは外部の空気から熱を奪っていることになる。例えば消防士の耐火服の中から熱を奪うことができれば、その分体温を下げることができる。はず。人間は活発に動いているときは300W程度の発熱量だそうだから、外部からの入熱も考えると平衡とまではいかずとも、無いよりは遥かに効果がありそう。

 HAZMATスーツは気密服の中にボンベがあるし、外部の熱源はあまりないから、レギュの吸熱はある程度効果はありそうな気がするけど、どうなんだろうか。


***


 Mode-3/A/C

 1200と0000がかなり長い間継続的に出ていた。VFRの小型機が、Mode-C(高度応答)が壊れた状態で飛んでいるんだと思う。さすがに高度計が壊れた状態で長時間飛ぶことはないだろうから、インターフェースの不具合のはず。


 1時間くらい継続的に出ていたっぽい(未デコード応答もMode-3/A/Cの弱いやつ)。


 TCASってこういう場合どういうふうに機能するんだろう? Mode-Cの0000応答(ギルハムコード未割り当て)なら明らかに気圧センサが起動中(or未接続)だから、その場合は同じ高度プロファイル(高度・昇降率)で飛行中として処理する、みたいな例外処理が入っているのかな。


***


 PCを媒介にしてNISTのUTCとUT1のNTPサーバーの差をグラフ化

 ネットワークの安定性とかでいろいろ誤差が大きいけど、傾向は見える。2ヶ月で60msくらい動いてる。7月下旬に入ってからはちょっと落ち着いている感じもあるが、実際にそうなのか、見かけ上のものなのか。


***


 1575.42MHzのC/Aコードを逆拡散して可聴化してみた


 搬送波に位相ロックして、max(0, 実軸)でBPSKをOOK/AM化して、搬送波のドップラ+5kHzの正弦波を変調している(実軸がP信号とするとC/Aは虚軸というべきかもしれないけど)。

 最初は受信機由来の見かけ上のドップラがあるけど、SF1,2,3を受信して測位演算が始まるとクロックエラーを推定して除去できる。

 航法メッセージの構造を考えながら聴くと(見ると)面白いけど、とはいえ一度やればもう十分かな。


*


 移動経路の図を追加。3Dと、各平面に投影した図。緑色の線が衛星の方向を示している。固定受信だとDOPに応じた分散が見える。この図だと細長く伸びているだけだけど、衛星の分散が悪いとパンケーキが立ったような形になったりもする。

 一応3Dで処理しているので、マウスでドラッグすれば位置や向きを変えて見れる。その都度GDI+で描画しているのでフレームレートはかなり低いけど。

 このときの衛星の配置は南西に多いので、その方向に向いた細長い回転楕円体みたいな分布になっている。直感的には衛星が多い方向へのレンジング精度が高いわけだから、衛星が多い方向の精度が高くなるような気がするけど、実際にはその逆。ノイズが時間方向に感度が高くて衛星が多い方向へ接近・離隔するような動きに出るのかな?



 GPSの説明でよく見る図。

 左が高DOP(精度が悪い)、右が低DOP(精度が良い)、という状況。左は左右方向の拘束が弱くなる。とすると、左右方向(水平面)の精度が悪くて、上下方向には高い精度が出るはず。しかし、実際には、衛星が多い方向(径方向)の精度が悪くて、衛星に直交する方向(周方向)の精度はそれなりに高い気がする。

 GPSは水平方向の精度は高いけど高度方向の精度は低い、という話があるけど、これは衛星が上に固まっている(少なくとも水平面以下には衛星は無い)から、衛星配置の重心がある方向は精度が低いのを表していると思う。

 航空機のDMEを使ったρ-ρだと距離は往復時間で直接計測できるから上図の説明がそのまま適用できるけど、GPSのように時間方向(距離バイアス)にも自由度のある方式は、上図の説明は適用できなさそう。GPSの仕組みは測距測位だけど、処理内容的や誤差の傾向は双曲線測位に近い気がする。

 本格的に測距測位にしたいなら原子時計とかが必要になってくるんだろう。少なくとも、1秒間で1m程度の揺れに収めたいなら、光速の逆数(10^-9)オーダーのクロックが必要になるはず。CSACを研究している人たちはスマホに乗せたいとかIoTで使いたいとか色々言っているけど、少なくともあと2,3年でそういうふうに普及するかというと期待薄な気がする。まだまだ時間かかりそうだなぁ。MicrochipのCSACも3000USD弱(5k個)だから、まだまだ遊びで気軽に使えるようなものじゃない。

 衛星に対する接近・離隔はドップラや搬送波の追跡である程度正確に推定できるはずだから、キャリアスムージングみたいな処理でも平滑化できそうだし、センサに余裕があるなら慣性センサで補強することも考えられるし。CSACの普及(開発)が進まないのは、そもそも需要がないからなんだろうな。一旦普及してみれば有ったほうが良いという話になるのかもしれないし、あるいは有っても大して効果はないのかもしれないし、どちらにしろ普及してみないと判断ができない程度の差なんだろう。

 GPSくらいの用途なら例えば10^1秒で10^-10オーダー(11桁)とかの精度が欲しいわけで、10^3秒とか10^5秒とかの中長周期な安定性はあまり必要ないだろうけど、だからといってその部分がいらないから小さいクロックを作ってくれ、というのもまた難しいんだろうな。


*


 GPS衛星の軌道計算の比較

 エフェメリスから求めた位置を正解値として、1次(位置+速度、カルテシアン6要素)と2次(位置+速度+加速度、カルテシアン9要素)で近似した場合の、正解値からの距離をグラフ化している。

 1次の場合は例えば10ミリ秒後で0.01mmオーダー、1秒後で0.1mオーダーの誤差になる。

 対して2次の場合は0.1秒後までは10nmのオーダー(おそらくdoubleの精度限界。衛星位置が7桁に対して10nmが8桁、足して15桁だから、doubleの桁数に一致する)、1秒後でも10umオーダーで、1次に比べて2-4桁高い精度が得られる。


 IS-GPS-200でカルテシアン9要素の計算方法が説明してあるの、ずっと謎だったんだけど、測位演算でイテレーションするときに一々ケプラリアンから位置を計算することなく、一度カルテシアンに変換してしまえば、その前後数秒程度は単純な計算(p+v*Δt+a*Δt²/2)で衛星位置が十分な精度で計算できる、ということなのか。

 自分は観測量として擬似距離ではなく衛星時刻を使っているので、衛星の位置は1回目の計算で確定するからイテレーションの中で衛星位置を更新する必要はないけど、普通のアルゴリズムではイテレーションの中で衛星位置を更新する必要がある。都度エフェメリスから計算すると計算コストが比較的高いので(特に1980年代当時の技術水準を考えれば)、0.1秒程度ならほぼ誤差のない精度が得られるカルテシアン9要素はかなり有力な気がする。

 擬似距離を求めるための受信機時刻は、測位演算で確定する前にはある程度の誤差があるけど、これは例えば適当なGPS衛星で得たクロックに適当なオフセット(例えば75ms)を加算すれば、ほぼ正しい時刻(10msとか)程度に設定できるから、擬似距離の時刻項はその程度の大きさ(大きくても±0.1秒)に収まるから、カルテシアン6要素では多少誤差が大きいけど、9要素ならほとんど誤差の無い位置が得られる。


 ただ、「GPSのための実用プログラミング」のソースをざっと眺めてみた感じ、イテレーションループの中でエフェメリスから位置3要素を求めているらしい。この本はあくまでもGPSの基本的な説明という内容のはずだから、組み込みMCUでリアルタイムに測位演算を行う、みたいなことは想定していないはず。PCでノンリアルタイムに計算するなら都度エフェメリスから計算しても問題ないだろうし。カルテシアンの元期とかまで管理し始めたら数字が増えすぎて面倒くさいってこともあるんだろうしな。


 厳密に言えば、カルテシアン軌道要素はepochから重力モデルとか輻射モデルで軌道伝播させていくものだから、SBASの軌道9要素(やGPSで計算できるそれ)はカルテシアンとは別物なのかもしれないけど。



 GPSの観測量が時刻じゃなくて時刻の差(時間、実際には光速を乗じて距離)で出力されるの、まだ納得できないんだよなー。時刻で出しておけば観測時の衛星位置を確定できるから、イテレーションの中で処理する必要がない。擬似距離だとイテレーションの中で計算しなきゃいけないから(3次元の2次関数で計算できるとはいえ)面倒くさい気がする。

 RINEXファイルのフォーマットを見ると、擬似距離が直接書いてあるから、受信機と衛星の距離を簡単に把握できる利点はありそう。けど、その程度の利点のためにわざわざそんなフォーマット作るかなぁ。。。


***


 Google IME、0-9の数字を上付きとか下付きのUnicodeに変換してくれるのはありがたいし、+記号も上付き/下付きができるのに、なぜか-記号の上付き/下付きが変換できないのが不思議。なんでだよ、むしろ+より-のほうが必要だろ。

 各種数字やいくつかの記号はUnicode 1.0で上付きや下付きが定義されているけど、かなりバラバラな位置に入っていて謎い。


***


 C#でGUIスレッドが走り終わったことを検出するみたいなことって可能なんだろうか?

 適当なスレッド(Task)の中でBitmapに書き込んで、書き終わったことをGUIスレッドへ通知してPictureBox.Refresh()を呼んで、その後でまたTaskでBitmapへ書き込んで、みたいな処理をやっているんだけど、PictureBox.Refresh()を呼んでGUIスレッドがBitmapを読み終わる前にそのBitmapを使っているGraphicsへ書き込みを行うとInvalidOperationExceptionが出てくる。

 GUIスレッドでもちょっと重い処理を走らせているから、GUIへPictureBox.Refresh()を投げても、それが終わる前にレンダリングスレッドが走り出すと困ることになる。

 Bitmapを2枚持っておいて、Task<Bitmap>で交互に返して、Taskが正常に終わったらPictureBox.Imageへ入れる、みたいな処理にしてみたけど、これでもいまいち正常に動いていないような気がする。

 理想的には、PictureBox.Refresh()を呼んでからPictureBox.Imageに入れているインスタンスを使い終わるまでの範囲を検出したい(その間をセマフォとかでロックするイメージ)。

 int配列とかをピン留めして、それを参照する2個のBitmapを作って、読み出し用と書き込み用を分けてやれば、少なくともアクセスの競合を検出することはなくなるはずだけど、今度はRefreshを呼んだタイミングで書き換えをしていると表示がチラつくはず。


 あと、func(int arg1, int arg2, int arg3)とかfunc(params ReadOnlySpan<int> args)みたいなものに対する呼び出しでvar a = (1, 2, 3);func(a);みたいにタプルを渡せるようにならんかなー。


0 件のコメント:

コメントを投稿