[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/07 13:31 / Filesize : 223 KB / Number-of Response : 993
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part53



1 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 20:11:11 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part52
pc12.2ch.net/test/read.cgi/tech/1238548552/

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

345 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 12:28:08 ]
>>344>>339です。

346 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 02:08:09 ]
会社で社内の業務改善ツールを任されることになりました
上からJavaかC#を選ぶようにいわれましたが
どちらが扱いやすくて今後の将来性がありますか?

347 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 02:12:17 ]
C#スレで訊いたらC#と答えるに決まっているだろう

348 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 02:23:27 ]
>>346
Javaスレで聞いたら?
Javaって返ってくるだろうけど。

まぁ、アレですよ。
自分で使いたいと思うほうを使えばいいと思います。
どっちも将来性なんて分からないので。

349 名前:デフォルトの名無しさん [2009/07/22(水) 02:29:17 ]
>>346
製作されたソフトウェアのどちらが長期使用に耐えられるかと言ったら
C#だろうな

350 名前:デフォルトの名無しさん [2009/07/22(水) 04:16:08 ]
www10.ocn.ne.jp/~mitinoie/RPGProject.zip

RPGClientでログインして、少し動かした後で切断。再度ログインすると、KeyNotFoundExpectionが発生してしまう。

しらべてみると、MapChangReq()のunits.setUnit()でunitlistに登録したキーの値がfindUnit()でキーを元に検索しようとする前の段階で入れ替わってるのが原因だとわかった。

でも、治し方がわからない。
詳しい人がいたら教えてほしい。

351 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 07:48:58 ]
Windows環境限定でいいんだったらC#でいいんじゃね?


352 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 07:59:31 ]
互換性考えるとC89だよな

353 名前:デフォルトの名無しさん [2009/07/22(水) 08:37:00 ]
コンシューマ用ならC#が俄然有利な気がするが
後方互換保ってくれるかわからないんだよなぁ
なんだかんだで10年来動き続けてるVB6という手も怖い



354 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 09:17:18 ]
>>352
互換性(笑)

>>353
少なくとも IL は互換性保たれるんじゃないかな。


355 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 09:48:41 ]
>>350
プロジェクト開けねーじゃねーか・・・XNA入れないとならんのか?メンドクサ

356 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 10:01:33 ]
>>350
解凍できね

357 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 10:25:04 ]
>>356
7zipで解凍できたよ。

>>350
ぱっと見なんだけどRPGServerをリブートしていたというオチではないか?
UnitManagerのunitlistをセーブしたりしている箇所はどこだ?

しかし、なんかUnitの管理とかが微妙な感じがする。
精査したわけじゃないが、unitsが座標ごとに持ってる部分とか。

358 名前:デフォルトの名無しさん [2009/07/22(水) 12:04:26 ]
>>357
RPGServerをリブートしているという落ちは残念ながありませんw
unitlistをセーブしている部分はsetunit、removeall、removeUnitの三つです。



359 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 13:40:05 ]
>>358
右クリックして、送る→圧縮(zip 形式)フォルダ
で圧縮したものでうpしなおしてくれ。

360 名前:358 [2009/07/22(水) 13:54:39 ]
>>359
すまん。今使ってるウィンドウズにはその機能はない。

361 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:44:12 ]
>>360
機能がないんじゃなくてテメーが無効にしたんだろ。

362 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 15:05:03 ]
使っているWindowsかビルド環境が古いというオチか。

363 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 16:11:02 ]
Vistaの標準のエクスプローラで解凍できたけどな



364 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 16:33:30 ]
>>358
んじゃ、recive_packetでMapChangReqコマンドを投げる前にHandleInput受け取って
SetPosコマンド投げた。とか?
は無いか、initedチェックしてるから。

わかんね。ギブ。

ただ、ひとつ気になったのはunitlist.Add(id, u);。
Dictionary#Addは「ただし、指定したキーが Dictionary<(Of <(TKey, TValue>)>) 内に
既に存在する場合、Item プロパティを設定すると既存の値が上書きされます。
一方、Add メソッドは、指定したキーを持つ値が既に存在する場合、例外をスローします。」

365 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 22:30:01 ]
何が何だかよくわからない。
切断した後IPとか変わってても大丈夫なの?

366 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 22:54:46 ]
駄目だけど、そこんとこはまた別の問題。
ツッコミどころはまだまだ多いけど、それは一つずつ解決していくしかなかろう。
とりあえず、結構頑張ってると思う。

367 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 18:08:18 ]
C++/CLI のスレから誘導されてきた。よろしくお願いしたい。

----------

おしえて。

フォームアプリのテキストボックスとかにデータバインディングで、
DataTable の要素を関連づけて入力値を管理したい。

ここで、テーブル中のレコードが1つの場合はいいんだが、複数あって
かつ、バインドするレコードを動的に変更したい場合ってのはどうすれば
いいのだろうか?

よくわからなかったので、

・バインド用に同じ構造のテーブルを用意して
・そこにレコードをひとつだけ作り
・そのレコードに元テーブルの任意のレコードの値をコピーする
・フォーム終了後にもとのテーブルのレコードに値をコピーし直す

方法で使おうとも思ったのだけど、もっと直接的な方法がありそうな気がする。
いかがだろうか。教示いただけると嬉しい。

368 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:14:08 ]
何を言いたいのかがハッキリわからないけど
DataTableに複数レコードつっこんで
あるときは1レコード目、あるときは2レコード目をバインドすればいいんじゃないの

369 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:37:11 ]
返信をありがとう。

>あるときは1レコード目、あるときは2レコード目をバインドすればいいんじゃないの

その2レコード目をバインドする方法がわからなかったんだ。。。

370 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:38:54 ]
何言ってるんだろ? 次のレコードに進めるだけだろ。

371 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:37:42 ]
ああ。そう言う方法があるんだね。
ごめん。まだこれの経験が浅くてそれ自体がわかってないんだ。
その方向で調べ直すよ。ありがとう。

372 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:35:25 ]
BindingManagerBase::Position のことか。
気がつかなかったよ。お騒がせしました。

373 名前:デフォルトの名無しさん [2009/07/27(月) 14:13:58 ]
非ジェネリックのIDictionaryをジェネリックのIDictionary<TKey, TValue>に
変換するスマートな方法があったら教えてください。
foreachで別のDictionayに1つずつ追加するのはやれてます。



374 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 14:30:54 ]
それが一番だと思うけど。
dic.Cast<DictionaryEntry>().ToDictionary(entry => (TKey)entry.Key, entry => (TValue)entry.Value);
がスマートとは思えない。

375 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 14:34:42 ]
C# 2.0
で質問です

System.Threading.ManualResetEvent
のインスタンスを使用して1ミリ秒のウェイト処理をループ中にかけようとしているのですが
 ・Vista環境だと上手く1mSec 程度停止するのに
 ・XP環境だと15mSec程度まで跳ね上がる時があります。
 OSの分解能ということで1mSecは諦めるしかないのでしょうか?

 用途は最高速で常時まわしたい処理を以下のソースのWhileの中に組み込んでHOGEの処理をしているのですが
可能であれば10mSec以下で1ループを終わらせたいのです。(中の処理は2〜3mSec程度)
 ただしこのままでは別スレッドで実行しているにもかかわらずCPU負荷率が高すぎるために
最低レベルでのスレッド停止処理を行いたいのです。
ちなみにSystem.Threding.Thred.Sleep(1); を行うとVista環境でも1mSecより大きく停止してしまいます。

System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(false);
While(True)
{

    HOGE();//処理

    //ストップウォッチ計測開始
    mre.WaitOne(1);
    //ストップウォッチ計測終了
    
    if(exitFlag == true) break;
}

何とか最速でまわしつつ負荷を上げずにWhile文を回し続ける方法はないでしょうか?

376 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 17:19:40 ]
1msの分解能が欲しかったらCPU負荷率は諦めるしかないと思うけどな
スレッド切り替えるのに1ms以上かかりそうだし

377 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 17:55:33 ]
>>376
そうですか・・・
まぁヂュアルCPUなんで負荷率は50%なので構わないと言えば構わないのですが・・・
できるだけ使用率を低くして寿命を延ばしてやりたかったのです

378 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 17:59:39 ]
>>375
Sleepすることが目的ではなく、CPUを使いすぎることを抑えたいだけのように感じる。
もしそうなら、Priorityプロパティでスレッドの優先度を下げるだけというのはどう?

もちろん、優先度を下げるということはCPU使用率を下げることとは違うから、、
ほかにやることがなければCPUを使い尽くすということに変わりはないけど。

379 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 18:02:17 ]
>>377
何をやりたいのか知らないけど専用マシンを用意すれば?

380 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 18:32:57 ]
10mSecでTimer回した方が良いように思えてならない。
再入をブロックする必要はあるけど。


381 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 20:17:27 ]
>>375
よくわかんないけどこういうこと?

Stopwatch sw = new Stopwatch();
long nextTiming = sw.ElapsedMilliseconds + 10;
sw.Start();

while (true)
{
  while (sw.ElapsedMilliseconds < nextTiming) { Thread.Sleep(0); }
  nextTiming += 10;
  Console.WriteLine("Now is {0} ms", sw.ElapsedMilliseconds);
}

Thread.Sleep(1)にしてやればCPU使用率は無駄に上がらない。
その場合、処理のインターバルの精度は落ちるけど、時間あたりの処理回数の精度は
保てるといってよいんじゃないか。

382 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:32:44 ]
マルチメディア系の機能でミリ秒レベルの精度でsleepする方法ってあったりするんだっけ?
普通のSleepって、TimeBeginPeriodで指定した分解能でスレッドの状態変わるんだっけ?

もしSleepの精度にTimeBeginPeriodが効くなら、それやってスレッドの優先度をあげればいいかも。
ただし処理をきちっと終えてちゃんと確実に速やかにSleepしないと死ぬことになるが。


383 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:35:31 ]
各回のインターバルの精度が必要でないなら、10回分繰り返して10回分Sleepとかそういう手もあるが。




384 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:42:24 ]
>>382
timeBeginPeriodは消費電力を増やすと言われているのだから、
寿命を気にする>>377には似つかわしくないと思う。

385 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:54:07 ]
HDDはともかく、CPUはヒートシンクが動作中に外れるとか
余程のことでもなければ「寿命」を縮めるなんてことはないと思うけど。
真空管じゃないんだから

386 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:07:36 ]
まあCPU自体にはあんま関係ないけど、
使用率が高いところを維持するのは全体で見ればあまり望ましいことじゃなかろう。

あと確かに大麻精度あげると電力使用はアップしてしまうのかも知れんが、
CPU使用率が高いままになるよりはましじゃないかと思うがどうだろう。
もちろんそうせずに済むならそれにこしたことはない。


387 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:19:55 ]
結局のところ、何であんな事をやりたいのかハッキリしないと何とも言えん

388 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 10:43:04 ]
C#では、グラフィック関連のメソッドで、小数の引数はfloat型になってますよね。
floatよりdoubleの方が一般に速いと思うのですが、なぜfloatなんですか?

389 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 10:49:39 ]
GPUはほぼ単精度までしか扱えなかったぜ
まあGDI+はGPU使わんけどな!

390 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 10:57:27 ]
計算速度じゃなくて帯域幅の問題。
あとdoubleが速いってのは今のCPUでの話にすぎない。


391 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 10:58:17 ]
あGPU関係なかったか…

392 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:00:36 ]
>>389
なるほど…。
今まで、座標を保存するための変数x, yをdouble型で宣言して、
描画時にintに変換して使っていたのですが、
これはfloatにしてキャストなしで使った方がいいんでしょうか?
「float同士の演算(座標計算時)」と「double同士の演算(座標計算時)+intへのキャスト(描画時)」
では、どっちが速いんでしょうか。

393 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:05:11 ]
>>390
> 今のCPUでの話にすぎない。
昔のCPUのことを想定してどうすんだよw



394 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:19:55 ]
>>392
自分でベンチ書いて試しなよ
その方が納得できるだろ

395 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:53:38 ]
昔のCPUの話じゃなくて今のGPUの話だよ。
関係なかったけど。

396 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:20:35 ]
レスが遅くなりました。

>>378
おっしゃる通り現在の処理速度を犠牲にせずにCPUの負荷を下げてあげたいということです。
スレッドの優先度は、この処理部分以外にあまり同時に激しい処理をしているわけではないので微妙な感じです

>>379
まぁ専用マシンを用意してもCPU負荷がずっと大きな値に張り付くのは・・・微妙なきがします。
FA系なので安定して長く動作させたいのです。

>>380
やってみた感じスレッドのタイマで1mSecで動かしてもどうも間隔はOSに引っ張られるようですorz
例えばですが・・・再入ブロックはこんな感じの処理のことでしたっけ?

タイマコントロール
void tick
{
 タイマ停止
 処理
 タイマ開始
}

スレッドタイマ (間隔で動かすというか1回だけ動かすのを繰り返す)
void Tick()
{
処理
次回Tickを動かす時に1mSec間隔をあけて実行
}

397 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:37:37 ]
>>381->>383, >>387

本当はWhileの中は最速でまわしてあげたいのです。
しかし、CPU負荷率が高くなりすぎるのでそれを防ぐためだけに仕方なく1mSecのスレッド停止を挟んでいるのですが
そのスレッド停止がXPではきっちり1mSec止まってくれない
(別に2mSecとかでもいいのですが15mSecとか止まってしまうのです。)

結局やりたいことを説明すると

FAの工場内のでラインの制御をおこなうのに1スキャンあたり(1ループ)25mSec以内で処理しなければ処理ヌケが発生する。
→処理ヌケが発生しないようにする処理は現在のループ処理の中では余裕
→だけどCPUがずっと高い使用率に張り付いたまま
→基本的に長期安定動作させたいので使用率は大きいよりは小さいほうがいい
→SleepやManualResetEvent.WaitOneではXP上で停止時間が不安定 (これで運用すると少しでもOSの動きに引っ張られると処理時間が延びて処理ヌケしてしまう)
→VISTAはなぜか停止時間が結構安定する
→上に VISTAにしてくれというと「FAでVISTAとかまじありえね XPでやれ」 と言われ取り合ってももらえず
→打つ手が思い付かずに ここへ知恵を借りに
    ↑いまここ

そして同じPC内にはコスト削減とかでラインの画像判定を撮って判定するソフトが・・・
(これ自身はCPU負荷はそこまで使いません。 一瞬5〜10%まで上がる程度が50mSec程度の間隔)

こんな状況ですorz
そもそも、Pgを別のPCに分けてもメインのループ部分がCPU使いっぱなしになるので問題の解決はしないという・・・

>>385-386
CPU自体は迷信なのかもれません。
まぁ、ただずっと高しようりつで張り付くと結局温度が上がってしまうので
色々と起きてきそうなのです。

398 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:49:09 ]
CPUのタイムスライスってレジストリでいじれなかったっけ?
そこまでシビアなFAの制御なら専用のCPUボードにやらせて、
OSはサマリーだけ受け取るような仕掛けにしないといかんだろう。


399 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:53:35 ]
>>398
本当はそうなんですよね
せめてPLC使って処理させるとか

でも・・・今回は期限ないうえにコストも落とせという色々無茶な状態が重なってしまいまして…

400 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:11:31 ]
>>399
RTOSが必要なんじゃね?

この辺にも色々書いてあるけど
www.microsoft.com/windowsembedded/ja-jp/developercenter/whitepaper/xpe/hardrealtime.mspx

401 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:13:02 ]
他のプロセス(サービス含む)が動いたらあっという間に25ミリ秒とか過ぎ去るな

402 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:17:34 ]
>>400
エンベデッド(これで読みはいいのか?)ですよね
そう、せめてそれがあれば最低限のコンポーネント入れていけるとおもうんです
しかし普通のPCに普通のXP PRO
サービスとかはできる限りとめて動かしていますがなんというか・・・がっくりです

>>401
そうなんです!

というか、やる気起きないのでダラダラと

403 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:22:06 ]
連投ばっかですみません

なんとなくですが
>>382
のTimeBeginPeriodでいけそうな気がします。
また詳しいことは微妙ですが
これ使って簡単に1日程度動かして様子を一回見てみようかと



404 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:53:02 ]
>>392
描画メソッドの呼び出し頻度なんか知れてる
呼び出してからの実際の描画処理の方が遥かに時間がかかるからそんな細かい差は全く意味がない

405 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 19:47:21 ]
>>403
なんか>>397を読んでもやっぱりよく分からないんだけど、
要するにDIOか何かをポーリングしてるのかな?

それでそのDIOのイベントに応答するときのレイテンシの最大許容時間が25ms、
みたいなこと?

406 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:18:16 ]
浮動小数から整数への丸め制御方法によっては、intにキャストする回数が多いと遅くなるかもね

407 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:24:57 ]
そんな差が目に見えるほど描画メソッド呼び出したらそれこそ死亡

408 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 21:33:20 ]
>>397 >>403
タイマーが15ms間隔でしか発動しないのはWindowsの仕様。
パラメータでは1ms単位の数値が設定できるけど、実際の動作は約15.5ms間隔に切り上げられる。

TimeBeginPeriodを使えば間隔を詰めることはできるけど、実際に試してみると、
最短の間隔がせいぜい2ms程度で、それより長くなることもある。
それにTimeBeginPeriodには副作用があって、他のアプリがたまたまTimeBeginPeriodを再設定してしまうと、
そのマシンで動いているすべてのアプリが影響を受けてしまう。
>>375でVistaは1msてのは、たまたま何かのアプリがTimeBeginPeriodをいじってただけの可能性が高い。

そもそもSleep関数の動作は「少なくとも」指定した時間経過、だから、どれだけオーバーするかは運次第。
ただしこれはVistaまでの話で、Windows7ではタイマー関係がようやく強化される予定なので、
どうしても2ms以下の間隔を死守したいならWindows7を使えばすんなり解決するかもしれない。

409 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 21:47:44 ]
タイマっていうかタイムスライスの問題だからちょっと話がズレてると思うけど。。

410 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 21:53:02 ]
>>408
XPしかだめっつうてんだろw


XPにPLCと同じことさせようとしても無理。
制御じゃなく監視だよね?
FA屋で制御までさせようとしてるなら職変えたほうが良いよ。

411 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:08:01 ]
Chrome起動中だと高速化するよ(笑い)

412 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:16:54 ]
25msなら、スレッドの優先度上げてやればSleepでも大丈夫かもしれん(実質15msくらいで)。
まあTimeBeginPeriod使った方がいいと思うけど。

優先度を上げない場合、Sleepでの停止自体は短時間でも、実行順が回ってくるまでに
タイムオーバーする危険がある(他のスレッドがある場合)。
優先度を上げると実行可能になった時優先的に処理が回ってくるので、遅れる危険が小さくなる。
ただし、処理を終えたら確実にSleepしないと、下手すればマシンハングアップ状態になるので注意。

ただ、いずれにしてもWindowsではそういうのを本当に確実に処理することはできない。


413 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:21:58 ]
XPのタイムスライスってどんくらいだっけ?15msくらいだっけ?20msくらいだっけかな?
もしフォアグラウンドで何かを動かしたらそいつは3倍になるから処理にもよるけど簡単に死ねる。




414 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:23:41 ]
スレッドの優先順位?
スレッド?

415 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:29:46 ]
>>413
1/64 s

416 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:37:57 ]
あー大きく上げるにはプロセス側で上げとかないと駄目だったか、
言いたかったのは単に最終的なスレッドの優先度を上げるということ。


417 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:23:52 ]
>397の人件費考えたらVISTAなんて安いものだろうに・・・

418 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:05:42 ]
ていうか・・・なんでWindowsでそんなリアルタイムOS的な制御をやろうと企画した
んだろ、発注元。

419 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:17:34 ]
>>397の言葉遣いも怪しいところがあるから、
必ずしも本来の要求仕様を満たすために必要のない手法を>>397自身が
考えているだけかもしれない。

なんかその可能性が高いように思う。


420 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:36:59 ]
リアルタイムにセンシングするとして、データをキューに入れといて別スレッド
で処理したら駄目なのかな・・・いや、そういう話じゃないな。

382の言うとおりマルチメディアタイマ使えばいいんじゃね?

421 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:47:18 ]
>>410
いや、Vistaはカンベンしてくれって話だろ?

422 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:48:14 ]
マルチメディアタイマーも15ms縛りがあったような…

423 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:49:07 ]
要求が「VistaとXP」なんだからそんなところの議論は無駄無駄



424 名前:デフォルトの名無しさん [2009/07/29(水) 01:16:39 ]
てか1ms周期で動かしたら大抵CPU時間使いまくるってオチ

425 名前:397 mailto:sage [2009/07/29(水) 02:13:03 ]
多くのレスありがとうございます。

そもそもなぜXPなのか?
というのはその上役の人間が安定志向でXPで今まで出来てたんだから という考えのもとに言っているような感じです。
しかし、その実績はせいぜい50〜1000mSec程度なのでどのOSでも簡単に実装できるものでした。

新しい機械を開発するにあたり
そこそこ高速で移動するライン状の物の位置をエンコーダで追い、DIOの信号を利用して移動させる という処理が必要になり
上役の人間が打ち合わせをした際にその程度の処理なら出来る という憶測で仕事を受け入れてしまいました。

その尻拭い的な感じをいまやっているわけなのです。
多くの皆様意見をいただき本当にありがとうございます。
さすがに限界を感じる感じなので、CPUをフルに使う状態での運用か、それとも設計や方針自体を変更するべきなのかを上の人間にかけあってみます。

ちなみに単純な処理です

→ 物の流れる方向
|----------------目的地     
センサ            ↓

センサをONしたタイミングでエンコーダ値を取得・保持し、目的地の位置までパルスが移動したらDIO信号をONし、流れているものを矢印の方向へ稼働させる機械を動かす。
たったこれだけです。
PLCでやればどれだけ単純で簡単なレベル という話 orz

多くの意見、今後のPGに生かしていこうと思います。
はぁ・・・月曜日が鬱だw

426 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 03:16:37 ]
しかもC#でとな('A`

427 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 06:05:48 ]
>>425
それ本当に1msの精度求められてるの?
仕分けでそこまでの速度を要求されるとは思えんのだが。


428 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 06:47:49 ]
>>393
intよりdoubleが早い環境なんて少数派だぞ

429 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 06:58:29 ]
PCでそんな制御やるのがそもそも間違えてる
カーネルから優先度の高い命令が割り込んだら何ぼでも処理落ちするぞ

430 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 08:05:16 ]
動かないと思ったらWindowsUpdateでリブートしてるんですね。わかります。

431 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:06:08 ]
>>427
初めに書いたとおり1mSecまでは求められてはいませんが
自分がWindowsで制御するなかでは初めての精度になります。

まぁごくまれに処理抜けする程度ならリターンしてもう一度処理をすればいいのでそれはそれで何とかなるわけですが
その為、処理負荷をできるだけ下げつつ処理時間間隔を短くするために可能な範囲で試行錯誤してみています。

>>426
>>429
そうなんですよね
何というか・・・GUIがほしいのはわかるんですが・・・

ちなみに現在実機でタイマ精度変更後に一日動作させた感じ1処理は停止含めて15mSecを超えていない(StopWatch調べ)感じです。
CPU負荷も常時高い位置にあったものが時々大きく上がる程度まで抑えることができている感じです。

でもぶっちゃけ実運用になったら・・・ちょっと怖いかも

432 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:17:58 ]
実際のとこ、全力でぶん回してもリスクは変わらないから。


433 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:31:00 ]
全くもってそのとおり
”ずーっと確実に最長1msの周期で観測する”という要件しか聞いていないから,PCの電源が落とされた時点でアウト,
PCの電源落とさないってんなら,たった一日の観測(>>431)くらいで何か分かるわけでもないし.
おとなしくデバイス作ってUSBかシリアルで接続したほうが安心.

GUIはC#でいいだろうが



434 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:39:49 ]
>>433
なんかPC障害でラインが暴走しそうな悪寒もする。
ちょっとした機能追加で制御不能になったりとか

担当者さんのデスマーチが目に浮かぶ

435 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:44:55 ]
今思った

GC時間考慮してねー

436 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:02:29 ]
まあ書かれてた処理内容なら大丈夫だろ。
もち注意して作る必要はあるけど。


437 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 19:25:38 ]
>>425
その説明だと、そもそも「目的地」のところにセンサをつけ、
その出力を「流れているものを矢印の方向へ稼働させる機械」に直結すれば
PCなんか要らないように思えるけど。

それにどうしてエンコーダが必要になるのか意味がわからない。
わざわざ目的地じゃなくてその手前なんかにセンサを付けるから、
目的地を検出するためだけにエンコーダが必要になるんじゃ?

438 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 20:39:38 ]
>>425
目的地にセンサつけたらだめだろw
目的地はn通りあるから事前に振り分ける処理が要る。
FAの機械ってのは大抵が独自のプロトコルで通信する。
だからPCなりPLCなどの中継が必要になる。
ここまでは皆理解していて、その先の精度や耐久性について語ってるのだよ。



439 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 22:02:36 ]
>>438
よくわかんない発想をする人だなあ。

仮に目的がN通りだとする。
それって何を基準に振り分けるの?

その仮説と>>425の説明をあわせれば、恐らく物体の高さか何かによって
ONするセンサが変わるから、それを基準に振り分けることになる。

だとすると、それってN個の目的地の直前で、対応するセンサと
「矢印の方向へ稼働させる機械」を直結することと等価でしょ。

440 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 22:37:57 ]
まあ、質問主が詳細を明らかにしてないのに細かいこといってもしょうがないか。
なんとなくセンサの設置法さえ工夫すればビジーループでポーリング、
なんてことしなくてもPCでもこなせそうな仕事にも思えるけど。

DIOの付属のライブラリって、たいてい入力のイベントでコールバックする
機能がついてると思うから、そのあたりとあわせればできるんじゃないのかな。


441 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 06:33:12 ]
>>439
バーコード、QR、RFIDなんかは普通に使うぞ?素人か?

442 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 19:46:27 ]
もうどうでもいいよ。
さっさと上司と拳闘しろ。

443 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 20:16:21 ]
>>441
そういう問題か。
そんなことは>>425の文章からは読み取れない。
余程の馬鹿じゃなければ、そんな重要なことは最初に明確に書くだろう。



444 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 20:42:16 ]
>そんな重要なことは最初に明確に書くだろう。

うーん
そんなこと無いケースが多々あるが・・・

445 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 20:48:45 ]
そういうスレでやれ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<223KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef