スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#雑記 コンソールで処理中であることを示す文字を表示

元元ネタ いろいろ備忘録日記 - コンソールで処理中であることを示す文字を表示
元ネタ  Gushwellさんのコンソールで処理中であることを示す文字を表示 
 
F#の非同期処理ででやってみました。
コンソールアプリケーションとしてコンパイルして実行してください。
 
open System
open System.Threading
 
//カーソルの位置と表示インターバルと表示文字を渡すと、それを一文字ずつ表示する
//非同期処理を返す関数
let makeProgressAsync (left:int) (top:int) (interval:float) (sArr:array<string>) =
    let n = Array.length sArr
    let rec loop i =
        async{do Console.SetCursorPosition(left,top)
              let index = 
                    if i = n then 0
                    else i
              do Console.Write(sArr.[index])
              do Thread.Sleep(TimeSpan.FromSeconds(interval))
              return! (loop (index + 1))
              }
    loop  
 
let main () =
    Console.WriteLine("処理開始.....")
    let curLeft,curTop =   Console.CursorLeft,Console.CursorTop
    let dispAsync = makeProgressAsync curLeft curTop 0.4 [|"が";"ん";"ば";"れ"|]
    let async1 = Async.TryCancelled((dispAsync 0),fun _ -> ())
    let cancellationSource1 = new CancellationTokenSource()
    Async.Start(async1,cancellationSource1.Token) 
    // 時間がかかる処理をシミュレート.  
    Thread.Sleep(TimeSpan.FromSeconds(10.0));  
    cancellationSource1.Cancel()
    Console.SetCursorPosition(curLeft,curTop)
    Console.WriteLine("処理が終了しました")
 
do main()
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。