表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

209/210

並列非同期処理

手術などもありましたが、気付けば、かなり間が空いてしまいました。


一応、この投稿で終了としたいと思います。


次は、(まだ完成していない)ゲームブックのマニュアル的な投稿が出来ればと思います。


表記のテクニックについては、後述するとして、モバイルアプリを作った感想をまとめると


・基本的には無料で作れる

・便利なツールもいっぱいある

・でもGooglePlayとかに出すのは(プログラム技術以外で)面倒が多い

・さらに規約やらが結構変わるのでメンテ(再作成に近い事も)も面倒

・HTMLとjavascriptで良いなら、その辺は楽できる。


こんな感じになります。


個人的には、わざわざ手間暇かけてアプリショップに出すよりはHTML+Javascriptで行くのが正解だと思います。(一度アップしたものを、いついつまでに規約に合うように修正してください!というメールが来ます)


ここから読む方のために一応説明すると、私のアプリ作成はionic+Angularと言うやり方で、HTML+javascriptのアプリを作り、それをAndroidアプリ(iOSアプリも可能)に変換したものですので、中身はほぼ一緒です。


簡単なものでしたら、PCが有ればすぐ出来ますのでGWの暇つぶしなどにいかがでしょうか?


さて、最後の備忘録的なネタです。


非同期と並列、二つのキーワードがありますね。


まず非同期ですが、素数の計算など延々に終わらない計算を普通にjavascriptで書くと、ブラウザがフリーズして応答がありませんというようなシステムメッセージが出ます。


これはプログラムがコード順に処理をするためです。


そのため、例えば画面の上に経過時間を表示させるようなコードでしたら、非同期というテクニックを使いメインのコードとは別に動かす方法が取られます。


私の使ってるionic+Angularでしたら、home.page.tsに以下の機能をインポートして

import { interval } from 'rxjs';


//開始時間と終了時間、非同期プログラムを動かす間隔をクラスの中に定義

startTime :number

endTime :number

//間隔1000分の1秒が1

i_Time = 1

//停止フラグ

flgStop=true


//非同期プログラムを投げる関数(例えば開始ボタンを押すと実行される関数)

async fnTestStart(){

//停止フラグオンならば処理しない

if(!this.flgStop){

return;

}

this.flgStop=false;

this.flg1st=true;

this.startTime=Date.now()

this.startTime2=Date.now()

const TimerCounter = interval(this.i_Time); //this.i_Time秒ごと繰り返す

//TimerCounter が以下の処理を非同期に投げてます。

//具体的にはfnSubscribedTimer()と言う関数を実行させて結果によって終了、あるいは継続させます。

const subscribeTimer=TimerCounter.subscribe(()=>{

if(!this.fnSubscribedTimer()){ //終了条件達成時、つまりfnSubscribedTimerがfalseを返した時、unsubscribeで繰り返しの終了

subscribeTimer.unsubscribe();

this.flgStop=true;

this.endTime=Date.now();

}else{

//終了時後処理(fnSubscribedがfalseを返した時の処理、繰り返しは継続する)


}

});

return;


}

//停止ボタンを押した時の処理

fnTestStop(){

this.flgStop=true;

}


//第一の非同期

//this.i_Time/1000秒ごとの処理

fnSubscribedTimer():boolean{

if(this.flgStop){

return false;

}

//経過時間書き換え

this.endTime=Date.now();

return true;

}



home.page.htmlにボタンを経過時間表示を設定する。

<ion-content [fullscreen]="true">

<div id="container">

<p>{{(endTime-startTime)/1000}} seconds</p>

<ion-button (click)="fnTestStart()">Start</ion-button>

<ion-button (click)="fnTestStop()">Stop</ion-button>

</div>

</ion-content>


これで一応動くかと思います。


余談ですが、ブラウザに表示されるHTMLの各部分を自動的に変更してくれるための技術的枠組みがionic+Angularです。(他にももっとあります。個人的には気に入ってますが他の枠組み(フレームワーク)の方が有名かも?)


例えば、リアルタイムに変わる予約者情報テーブルなんかも出来るので面白いと思います。

(サーバ側の仕組みも要りますが)


上記は、指定のタイミングで関数を非同期で繰り返すと言う、非同期の方法の一例です。

他の方法については必要に応じてお調べください。


次に並列化です。


それ程難しい話ではないのですが、私は少し躓いたので、ここに書いておきますね。


やり方自体は、単純に別なインターバルを指定して同じように非同期処理を投げてやるだけです。


ただし、上の処理とは完全に別に書いて下さい。上の処理内(インターバル内)に書くと処理止まることになるかも?


その辺は実験しつつ試すのが理解の早道だと思います。


さて、長々と書いていった投稿もここで終了とさせていただきます。


ゲームブックの開発自体は継続していますので、完成しましたらご報告させていただきますが、長々とお付き合い、本当にありがとうございました!


return true;

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ