初心者ながら、ご質問させて頂きます。
RS-232Cの通信プログラムを作ったのですが、通信中に他のタスクを実行
(メモ帳を起動など)したときに限り通信エラーが発生してしまいます。
そのため、処理を最優先で動かすことでエラーをなくそうと思っています。
いろいろ探して処理の優先順位を変える”Priority”プロパティというの
見つけたのですがどうにも使い方(書き方)がわかりません。マニュアル
を読んでもお恥ずかしい事に理解できません。
このPriority プロパティの使い方を教えて頂きたいのですが、たとえば
void test()
{
int a=1,b=2,c=3;
c = a + b;
}
のコード(C#)を優先処理させるには、Priority プロパティをどこにどう書けば
良いのでしょうか?。usingでなにか追加する必要はあるのでしょうか?。
SDKと呼ばれる物も必要なのかよくわかりません・・・。
OSはWindows2000を使用しています。
わからない所が多くて申し訳ないのですが、どなたかご教授をお願いいたします。
string mode;
mode=Thread.CurrentThread.Priority.ToString();
textBox1.Text = mode;
このコードで現在の優先状態を得る事ができました。
が、肝心のセット方法がわかりません、、、。
普通にセットしてやればよいのですが,「何が」わからないのでしょうか。
でもって,スレッドの優先順位を上げるのでは解決しないような……。
プロセスの優先順位を上げる必要がありそうな気がします。
>プロセスの優先順位を上げる必要がありそうな気がします
ご指摘の通りスレッドではなくプロセスの間違いでした・・・。
>普通にセットしてやればよいのですが,「何が」わからないのでしょうか。
つまり、プロセスの優先度を上げるPriorityのコードがよくわからないのです。
HANDLE Handle = GetCurrentProcess(); //プロセスハンドル取得
SetPriorityClass(Handle,vsTaskPriorityHigh);//優先度の割り当て
これでコンパイルすると
\Form1.cs(689): ; または = を指定してください (宣言の中にコンストラクタ
引数は指定できません)。
というエラーがでてしまいます。エラーは
SetPriorityClass(Handle,vsTaskPriorityHigh);
の行の(のところにエラーの赤線が表示されます。
なにか根本的に間違っているのでしょうか・・・。
根本的なところで間違っているような……。
このあたりを使います。
http://msdn.microsoft.com/library/ja/cpref/html/
frlrfsystemdiagnosticsprocessclasspriorityclasstopic.asp
単純にこいつに割り当てたい値を代入してやればよいです。
GetCurrentProcessとかSetPriorityClassはWin32のAPIですから,
C#からはそのままでは使えません。
# System.Runtime.InterOp.DllImportAttributeあたりを使う。
ヒントありがとう御座いました。
Process.GetCurrentProcess().PriorityClass =
System.Diagnostics.ProcessPriorityClass.RealTime;
で通信エラーが発生しなくなりました。
マニュアルの読み方というか使い方がさっぱりなので
いつも苦労しています。マニュアルを見て理解できる
人が不思議です。
私はマニュアルに
[C#]
public ProcessPriorityClass PriorityClass {get; set;}
な風に書いてあってもどこに何を書けばよいのかさっぱり・・・。
早く理解できるように頑張ります。
今回もありがとう御座いました。