ちおさん雑記帳

何の役にも立たない雑記から、誰かの役に立つ(かも知れない)メモなど・・

C# Task.Run()で時間の掛かる処理を別スレッドで実行させる

今更備忘録シリーズ第x段
ということで、Task.Run()で時間の掛かる処理を別スレッドで実行させるコード。
意外と分かりにくい(そうでもないかも)のは、別スレッドで実行させた処理が完了していなくても、
Task.Run()以降の行も(完了を待たずに)実行されるという話。
以下、簡単なサンプル

using System;
using System.Threading.Tasks;
using System.Threading;

namespace Sample1
{
    public class SampleClassA
    {
        public void ProcessA()
        {
            Task<bool> task = Task.Run(() => HeavyMethod()); // 別スレッドで重いメソッドを実行するが
            Console.WriteLine(task.Status.ToString());       // await指定やResultアクセスがない場合はすぐ次の行が実行される
                                                              // ここでは WaitingToRun
            bool b = task.Result; // TaskのResult(この場合bool値)を取得しようとすると、別スレッドの実行が終了するまでここで待つ
            Console.WriteLine(task.Status.ToString()); // ここでは RanToCompletion
        }
        private bool HeavyMethod()
        {
            Thread.Sleep(3000); // 重い処理
            return true;
        }
    }
}

ドライブ喪失によりアンインストール出来なくなってしまったプログラムをアンインストールさせる方法

タイトル長っ!

 

ということでですね、題名の状態になってしまって半日ハマったので一応メモ書き。

 

経緯としては

 

・H:ドライブ(HDD)にVisual Studioをインストールしていた

 

・このHDDがもう4,5年もので、たまーに嫌な音がするので、

 チェックをかけたら寿命が近い警告状態なことが判明

 

・急いで代替えの容量大きめのHDDを買ってくる

 

・ついでだったので、容量が少なめで微妙なHDD数台を全て外して

 買ってきたHDD1個に集約

 

で、快適に運用してたものの、久しぶりにVisual Studio

起動しようとしたら、あら大変、起動できないってそりゃそうだ。

 

しょうがないので一旦アンインストールしてから入れなおすかー

と消そうとしたらアンインストールが失敗する!

 

どうやらH:\Program Files~がないとだめみたい。。

 

えー、もうHDD処分しちゃってH:ドライブ復活できないんですけど!

 

 

で、レジストリに書いてある「H:\なんちゃら」を全て「C:\なんちゃら」

に書き換えればいけるんじゃない!?

 

 

とやってみましたが、結果変わらず(アンインストール失敗)

 

 

悩んだ末、物理的にH:ドライブが存在する状態にして試してみたらできました!

 

というながーーい前置きですが、そんな感じですハイ。

 

 

f:id:caffe1208:20191230193428p:plain

 

こんな感じで、C:ドライブ以外のドライブを一時的にH:に変えてアンインストールを実行してみましたの図

 

 

 

CLR YUV422形式の画像データをRGB24に変換する処理のサンプル

処理書いたのでぺとぺと貼り付けておきますです。

(動作確認はしてあるので、2017.03.16現在では少なくともちゃんと動きます)

 

YUV422のYUY2およびUYVYに対応してあります。

第6引数で指定して読み込みbyte位置を切り替えています。

 

変換に使用している計算式は調べてみるとわかりますが、幾つかの値があり、どれを使えばいいの?となるかと思います。

今回私は、openCVのドキュメントを元に値を流用しました。

(ですので、恐らくopenCVで変換した結果と同じになると思います(試してません))

 

変換処理の内容が理解しやすいように書いたつもりです。

なので、若干というか、かなり速度的に重いコードになっているかとは自覚していますw

本当はビットシフト等を使えば早くなるような気もします。

(そういうサンプルが載っている記事も見かけますが、初心者には分かりにくいかも知れません)

 

ちなみに、この処理でも、Debugビルドしたもので動かしても、デコードおよび描画で60fps以上余裕で間に合います

(会社の人権のないパソコン(Core-i5 mem8G HDD)使用にて)

 

という訳で、以下、ソース

続きを読む

NuGetでsqlite-net-pclがパッケージ追加できない対応

少しハマったので、単純ではありますが、メモとして記録。

(初心者しかこんなとこで躓かないのかも知れませんが。。些細な事でも記録として残すことにします)

 

あ、Xamarin Studioでの話なので、Visual Studioで同じことになるかは全く分かりません。

 

続きを読む

AppleCare Protection Planを付けるかどうか

さて、MacBook proを購入して丁度一ヶ月経ちました。

 

毎日会社にもっていき、1時間〜2時間ほど使い、帰宅してからも1〜2時間ほどバッテリーのみで駆動させていました。

その際、割と酷使したなという日で残60%、あまりビルド等をしないと残80%程度でした。

 

寝るときに毎日充電して、朝になるとまたACケーブルを抜いて会社に持っていくという日々。筋肉は少し鍛えられたと思います(そうじゃない)

 

私は、MacBook購入時にAppleCareも同時購入したので、有効期間(3年)が切れる直前にバッテリーを修理できたらなと目論んでいたり、いなかったり。

 

続きを読む