T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« Mac版は完成の域に達した | トップページ | やっと安定化できた »

Windows版を更新中

今は、Mirror-DTC Ver1.4.4の開発フェーズで、既にWindows/macOS用のβ1版を公開中なのだが、その次のステップとして、トランスポーターを更新中だ。Mac版は完成したので、その次として、Windows版を更新中だ。

とは言いつつも、実は、まだ、Windows版については、トランスポーターの変更作業には入っていなくて、サーバーの更新作業を行なっている段階だ。

具体的には、Mac版トランスポーターのテスト中に発覚した、4kモニター x 8の合成ディスプレイでは、クライアントで使用しているWindowsのAPIがクラッシュしてしまう問題を解決するために、サーバー側に、合成ディスプレイの縮小処理を追加中な訳だ。

サーバー側についても、現行版では、合成ディスプレイ時にも、画面キャプチャーにはDesktop Duplication APIを使っているのだが、巨大な合成ディプレイ用のキャプチャー時には、GPUメモリ不足なんかが発生してクラッシュした。

なので、Ver1.4.4からは、サーバー側では、合成ディスプレイ用の画面キャプチャー時には、より原始的なBitBlt関数を使う格好にしてあったのだが、上記の様なクライアント側の問題が発生する事を受けて、更に、合成ディスプレイ用のキャプチャーデータは縮小してクライアントに送信する処理コードを追加している訳だ。

同様の処理コードは、既に、Mac版で構築済みなので、変更が必要な箇所については判っている。

なので、作業は簡単に進むか、と、思っていたのだが、Windows版の場合、Mac版にはないサーバーの物理画面を暗くする機能があった訳だ。

つまり、その機能については、Mac版には存在しないので、その機能を有効化した場合には、特別な処理が必要になるので、今日は、主に、その辺の処理はどうすれば良いのかなあ、みたいな事を鑑みたり、コーディングしたりしていた。

しかし、上記の処理自体は、既に、何とかなったのだが、Mirror-DTCの嫌らしい所としては、転送対象の画面領域を、リモート操作中に、変更可能! というのがある。

まあ、この機能は、作者的にも、必要だと思ったので、入れてある機能になるのだが、プログラムというのは、動作を開始させるよりも、停止させる方が難しかったりする。

何故なら、普通は、動作をさせる為にコーディングをするので、動作の開始処理については、必要な変数なんかの設定を真面目に行い、必要な処理スレッドの動作を開始させ、最後に、必要な機能が動作する様にするのだが、この時、これらのコードをどうやって停止させるのか、については、普通は、真面目に考えていなかったりするからだ。

そんな馬鹿な! と、思う人は、原子力発電所について調べてみれば良いかもしれない。

つまり、原子力発電所というのは、建造して発電させる所までは、真面目に鑑みられているのだが、一旦、発電を開始してしまったら、発電所にある原子炉を廃炉にする方法がなかったりする訳だ。

これは、原子炉用の燃料だとか、出てくる廃棄物を、安全に廃棄する方法が存在しないからだ。

その結果として、原子力発電所の寿命というのは、ついこの間まで、40年、という事になっていた筈なのだが、今では、特に何の根拠も示されずに、60年に延長されている。

つまり、関係者がこの世から去るまで、原子力発電所は延命させないと対処できないので、そうしている、と、考えられる訳だ。

同様に、作者のコードについても、様々な処理を開始させるコードについては、それなりに真面目に作られているのだが、停止させる処理については、適当な場合も多い。

なので、Mirror-DTCクライアントなんかについては、一旦、接続を開始してしまえば、次の接続に切り替える事はないので、プログラム終了時には、プログラムを安全に終了させる様なコードは逆に危険なので、内部的に、様々な処理を強制終了させたりしている。

何故、プログラムを安全に終了させるコードが危険なのか、というと、安全に終了させたい場合、割り当てた各種リソースを解放しなければならないのだが、リソースを解放するためには、そのリソースを利用しているコードの全てを確実に停止させる必要がある訳だ。

しかし、スレッドの停止処理なんかを入れると、処理に時間がかかり、単なるプログラムの終了処理に数秒の時間が必要になったりする。

更に言えば、数秒の待ちで確実に終了してくれるのなら、まだ良いのだが、普通は発生しない様なリソース状態になると、各種スレッドがデッドロックを起こして終了してくれない場合もあるし、終了させたと思っていたスレッドがイベントを発生していて、各種リソースを解放した後に、そのイベントが発生して、リソースへのアクセス異常が発生してクラッシュする! みたいな事も普通にある。

上記の様な問題を発生させないためには、綺麗にプログラムを終了できる仕組みを入れておく必要があるのだが、前述の様に、普通、人間という生き物は、動かし方については、真面目に考えるものの、止め方については、考えていなかったりするので、真面目に止めようとすると、色々な問題が発生する事になる。

と、いう事で、今日は、そういった問題が発生したので、ブログ記事を書く時間も惜しんで対応していたのだが、後少し、問題は残っているので、Windows版トランスポーターの改良作業は明日の午後くらいからしか行えないかもしれない今日この頃だ。

« Mac版は完成の域に達した | トップページ | やっと安定化できた »

2024年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google