プロセッサとメモリの負荷の矢印表示に関する記事がすぐに気に入った。 重いプログラム/ゲームの3番目または4番目のインスタンスを開始して、空きメモリがどれだけ残っているかを調べる必要がある場合があります(以前のインスタンスのコードがスワップする状況にしたくない)。 または、プロセッサのロードを使用して-私は、現代のCrysis、Call of Duty、Mass Effectなどを考えていました。 ビデオカードとパーセントの両方をロードします。 今では、絵が遅くなっても、パーセントは30〜40%しかロードされないことを知っています。 さて、またはすぐにすべてのカーネルがレンダリングを使用するかどうかを評価します。 そして、目がぴくぴくする矢を与えるなんて喜びだ。
2番目の実装は、同じくらい明確ですが、魂に沈みません-そのような娯楽はありません。
だから私は決めた-いつか私は確かに矢印で繰り返すでしょう。
私がすぐにやらなかった唯一の問題は、もちろん指標の欠如の

古いボビンテープレコーダーからの2つの矢印インジケーター。 ああ、彼はかつてシネマとモダントーキングでボビンを巻き戻しました。
したがって、アイデアが機能するためには、次のものが必要でした。
- 適切なスケールの美しいインジケーター。
- インジケーターをコンピューターに接続するためのハードウェア。
- メモリとプロセッサの負荷を出力するプログラム。
タスクが明確になると、作業しやすくなります。
美しい指標
頭の症例は心臓からの接着剤で満たされていたが、彼は通常の事務用ナイフの下で生き延びなかった。 半分に分割し、古いスケールを取り出して、新しいサイズを描いて印刷しました。 逆順で組み立てられます。

記事を書いた後、私は写真を見て、それらを再び分解しました。 彼は妻から赤いマニキュアを取り、矢印を描いた。 それはより顕著であることが判明しました-これはビデオに表示されます。
ハードウェア
それから私はコントローラーで賢くはなりませんでした。 私の母にはLPTがあります。他の目的に役立つとは思えないので、彼が遊んでいるのは何もありません。
LPTは8ビット、チャネルごとに4ビット、矢印の16の位置-私はとても幸せでした。 最も単純なDAC-抵抗器とダイオード、私たちは2つのチャンネルを描きます(麻酔薬、ISISに申し訳ありません):

私は抵抗器の精度を無視し、自然界で起こったことを洗い流しました(10、20、39、82 kOhm)。 通常どおり、レイアウトをはんだ付けします。

仕事をチェックインします。 キャリブレーションでは、ポートに255の値を送信するときに、トリマーによって矢印を最大目盛に設定します。
プログラム
最も困難なことは、LPT(Win 8 x64)を操作するためのドライバーを見つけることでした。 数時間の検索の後、最終的に32ビットのDLPortIO(ドライバー+ライブラリ)が見つかりましたが、64ビットシステムにインストールするための指示がありました。 残念ながら、私はすでにリンクを失っており、 Yandex.Diskに保存しました。
さらに簡単です。 30分後、Delphiのプログラム(私が勉強したときから何とか覚えている唯一のこと)が書かれました:
ネタバレ
procedure TForm1.Timer1Timer(Sender: TObject); begin MemStatus.dwLength := sizeof( TMemoryStatus ); GlobalMemoryStatus( MemStatus ); MemVal := round(15*MemStatus.dwMemoryLoad/100) shl 4; // 4 - , - CPU CPUUsage3:= CPUUsage2; // CPUUsage2:= CPUUsage1; // CPUUsage1:= CPUUsage; // CPUUsage := 0; CollectCPUData; for i:= 0 to GetCPUCount - 1 do begin CPUUsage:= CPUUsage + GetCPUUsage(i); end; CPUUsage:= CPUUsage / GetCPUCount; CPUUsage:= (CPUUsage + CPUUsage1 + CPUUsage2 + CPUUsage3)/4; // CPUVal := Round(15 * CPUUsage); CPUVal := CPUVal or MemVal; DlPortWritePortUchar (888, CPUVal); end;
RAMとCPUの負荷値は1秒間に2回読み取られ、&H378ポートに送信されます。 元の記事へのコメントには、読み込み中のリソースを示すプログラムが消費するリソースの数に関する質問がありました。 私が答えます:タスクマネージャーによると、プロセッサの負荷は0%しかありませんでしたが、メモリは956kでした(手を離す必要があります。最も簡単な方法でフォームを作成し、非表示にします。
スケールの前半の精度は不完全で、100%に近いほど正確です。

軍団は存在せず、計画もされていません。彼らをモニターに寝かせてください。 バックライトはありませんが、計画されています。 どこに餌をやると思います。 デザインは本質的にはより審美的であり、加えて人によって作られ/組み立てられ/はんだ付けされる喜びもありますが、高価ではありません。
最後に、短いビデオ:
ご静聴ありがとうございました。キャビネット内にダイヤルインジケーターを見つけてください。