Priorityの使い方 – プログラミング – Home

通知
すべてクリア

[解決済] Priorityの使い方


とんぐ
 とんぐ
(@とんぐ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

初心者ながら、ご質問させて頂きます。

RS-232Cの通信プログラムを作ったのですが、通信中に他のタスクを実行
(メモ帳を起動など)したときに限り通信エラーが発生してしまいます。
そのため、処理を最優先で動かすことでエラーをなくそうと思っています。
いろいろ探して処理の優先順位を変える”Priority”プロパティというの
見つけたのですがどうにも使い方(書き方)がわかりません。マニュアル
を読んでもお恥ずかしい事に理解できません。
このPriority プロパティの使い方を教えて頂きたいのですが、たとえば

void test()
{
int a=1,b=2,c=3;

c = a + b;
}

のコード(C#)を優先処理させるには、Priority プロパティをどこにどう書けば
良いのでしょうか?。usingでなにか追加する必要はあるのでしょうか?。
SDKと呼ばれる物も必要なのかよくわかりません・・・。
OSはWindows2000を使用しています。

わからない所が多くて申し訳ないのですが、どなたかご教授をお願いいたします。


引用未解決
トピックタグ
とんぐ
 とんぐ
(@とんぐ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

string mode;

mode=Thread.CurrentThread.Priority.ToString();
textBox1.Text = mode;

このコードで現在の優先状態を得る事ができました。
が、肝心のセット方法がわかりません、、、。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

普通にセットしてやればよいのですが,「何が」わからないのでしょうか。

でもって,スレッドの優先順位を上げるのでは解決しないような……。
プロセスの優先順位を上げる必要がありそうな気がします。


返信引用
とんぐ
 とんぐ
(@とんぐ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

>プロセスの優先順位を上げる必要がありそうな気がします

ご指摘の通りスレッドではなくプロセスの間違いでした・・・。

>普通にセットしてやればよいのですが,「何が」わからないのでしょうか。
つまり、プロセスの優先度を上げるPriorityのコードがよくわからないのです。

HANDLE Handle = GetCurrentProcess(); //プロセスハンドル取得
SetPriorityClass(Handle,vsTaskPriorityHigh);//優先度の割り当て

これでコンパイルすると

\Form1.cs(689): ; または = を指定してください (宣言の中にコンストラクタ
引数は指定できません)。

というエラーがでてしまいます。エラーは
SetPriorityClass(Handle,vsTaskPriorityHigh);
の行の(のところにエラーの赤線が表示されます。
なにか根本的に間違っているのでしょうか・・・。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

根本的なところで間違っているような……。

このあたりを使います。
http://msdn.microsoft.com/library/ja/cpref/html/
frlrfsystemdiagnosticsprocessclasspriorityclasstopic.asp
単純にこいつに割り当てたい値を代入してやればよいです。

GetCurrentProcessとかSetPriorityClassはWin32のAPIですから,
C#からはそのままでは使えません。
# System.Runtime.InterOp.DllImportAttributeあたりを使う。


返信引用
とんぐ
 とんぐ
(@とんぐ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

ヒントありがとう御座いました。

Process.GetCurrentProcess().PriorityClass =
System.Diagnostics.ProcessPriorityClass.RealTime;

で通信エラーが発生しなくなりました。
マニュアルの読み方というか使い方がさっぱりなので
いつも苦労しています。マニュアルを見て理解できる
人が不思議です。

私はマニュアルに
[C#]
public ProcessPriorityClass PriorityClass {get; set;}
な風に書いてあってもどこに何を書けばよいのかさっぱり・・・。
早く理解できるように頑張ります。

今回もありがとう御座いました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました