NT4.0と2000のCPUの使用率を取得したいのですがどのようにすれば
取得できるのでしょうか?
 自分なりにいろいろ調べたら、HKEY_PERFORMANCE_DATAから
取得できるそうなのですが、レジストリを見てもみつかりません。。
また、隠しAPIの NTQuerySystemInformation
を用いれば楽に取得できるそうなのですが、これ↑知ってたら教えて
いただけないでしょうか。
 恐縮ですが、初心者ですので詳しく教えていただけないでしょうか?
どうかお願い致します。

A 回答 (1件)

MSのサイトにサンプルコードがあります。


場所は失念してしまいましたが、、、

また、MSDNの中にもあったはずです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qpthread_cond_waitとptherad_cond_signal

pthread_cond_waitで寝ているthreadに対して、ptherad_cond_signalにて起こして、そのthreadが再度寝るまでの間にpthread_cond_signalが複数回(2回として)Callされた場合、どのような挙動になるのでしょうか?

最初のSignalをA、以下B,Cとすると
A->cond_wait->B->cond_wait->C
となるのでしょうか?

宜しくお願い致します。

Aベストアンサー

>waitしていたthreadが稼動している状態でのsignal発行は空振りに終わるということでしょうか?
その通りです。
ptherad_cond_signalが発行されたとき、pthread_cond_waitで待機しているスレッドがなければ、そのシグナルは無視されます。
参考までに下記の実験結果を参照下さい。(空白は全角にしてます)
ソースプログラム
-------------------------------------------
#include  <stdio.h>
#include  <stdlib.h>
#include  <pthread.h>
#include  <time.h>
pthread_mutex_t mut_sub_print = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mut_sub_th = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_sub_th = PTHREAD_COND_INITIALIZER;
int main_sleep_time;
int sub_sleep_time;

void  sub_print(char *name,char *msg,int ctr)
{
  pthread_mutex_lock(&mut_sub_print);
  printf("%s:%s(%d)\n",name,msg,ctr);
  fflush(stdout);
  pthread_mutex_unlock(&mut_sub_print);
}
void  *sub_thread(void *adddr)
{
  int   ctr = 0;
  pthread_mutex_lock(&mut_sub_th);
  while(1){
    pthread_cond_wait(&cond_sub_th,&mut_sub_th);
    ctr++;
    sub_print("sub","con_wait終了",ctr);
    usleep(sub_sleep_time*1000);
  }
  return NULL;
}
// 第1パラメータにメインスレッドのスリープ時間(ミリ秒)
// 第2パラメータにサブスレッドのスリープ時間(ミリ秒)
int main(int argc,char **argv)
{
  int ret;
  int i;
  int ctr = 0;
  pthread_t  tid;
  if (argc != 3){
    printf("%s P1 P2\n",argv[0]);
    printf("P1:メインスレッドのスリープ時間(ミリ秒)\n");
    printf("P2:サブスレッドのスリープ時間(ミリ秒)\n");
    exit(1);
  }
  main_sleep_time = atoi(argv[1]);
  sub_sleep_time = atoi(argv[2]);
  printf("メインスリープ時間=%dミリ秒\n",main_sleep_time);
  printf("サブスリープ時間=%dミリ秒\n",sub_sleep_time);
  ret = pthread_create(&tid,NULL,sub_thread,NULL);
  if (ret != 0){
    printf("pthread_create error:%d\n",ret);
    exit(1);
  }
  usleep(1000);  //1ミリ停止
  for (i = 0; i < 10; i++){
    ctr++;
    pthread_cond_signal(&cond_sub_th);
    sub_print("main","cond_signal完了",ctr);
    usleep(main_sleep_time*1000);
  }
  sleep(10);
  sub_print("main","スレッド停止",0);
  exit(0);
}
---------------------------------------------
第一引数にメインスレッドのスリープ時間
第二引数にサブスレッドのスリープ時間を指定します。
メインスレッド側で、スリープ時間を大きくとり、ゆっくりと
cond_signalを発行すると、空振りが起こりにくくなります。
逆にメインスレッド側で、スリープ時間を小さく取り、
cond_signalを速射すると、空振りが起こりやすくなります。
以下、実行結果。
メインスレッド:300ミリのスリープ
サブスレッド:100ミリのスリープの場合
cond_signal 300 100
メインスリープ時間=300ミリ秒
サブスリープ時間=100ミリ秒
main:cond_signal完了(1)
sub:con_wait終了(1)
main:cond_signal完了(2)
sub:con_wait終了(2)
main:cond_signal完了(3)
sub:con_wait終了(3)
main:cond_signal完了(4)
sub:con_wait終了(4)
main:cond_signal完了(5)
sub:con_wait終了(5)
main:cond_signal完了(6)
sub:con_wait終了(6)
main:cond_signal完了(7)
sub:con_wait終了(7)
main:cond_signal完了(8)
sub:con_wait終了(8)
main:cond_signal完了(9)
sub:con_wait終了(9)
main:cond_signal完了(10)
sub:con_wait終了(10)
main:スレッド停止(0)

メインスレッド:100ミリのスリープ
サブスレッド:300ミリのスリープの場合
cond_signal 100 300
メインスリープ時間=100ミリ秒
サブスリープ時間=300ミリ秒
main:cond_signal完了(1)
sub:con_wait終了(1)
main:cond_signal完了(2)
main:cond_signal完了(3)
main:cond_signal完了(4)
sub:con_wait終了(2)
main:cond_signal完了(5)
main:cond_signal完了(6)
main:cond_signal完了(7)
sub:con_wait終了(3)
main:cond_signal完了(8)
main:cond_signal完了(9)
main:cond_signal完了(10)
sub:con_wait終了(4)
main:スレッド停止(0)

>waitしていたthreadが稼動している状態でのsignal発行は空振りに終わるということでしょうか?
その通りです。
ptherad_cond_signalが発行されたとき、pthread_cond_waitで待機しているスレッドがなければ、そのシグナルは無視されます。
参考までに下記の実験結果を参照下さい。(空白は全角にしてます)
ソースプログラム
-------------------------------------------
#include  <stdio.h>
#include  <stdlib.h>
#include  <pthread.h>
#include  <time.h>
pthread_mutex_t mut_sub_print =...続きを読む

Q_CRT_SECURE_NO_DEPRECATE が効かない?

お世話になっております。
現在、Windows XP、VC++2005 にてプログラム中なのですが、
「strcpy()」についてです。

本ライブラリはセキュリティ強化のため「strcpy_s()」の使用を
奨励されていますが、箇所が多いので取り合えずWarningだけでも
取りたいと思っています。

--
#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
charszBuf[10];
strcpy( szBuf, "test" );

return 0;
}
--

というサンプルコードに対して

warning C4996: 'strcpy' が古い形式として宣言されました。
'strcpy' の宣言を確認してください。
'This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'

と出たので、ファイルの先頭に

#define_CRT_SECURE_NO_DEPRECATE

と加えたのですがWarningが取れません。
同様に

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

としても駄目でした。

他に何か必要なことはあるのでしょうか?
#pragmaは出来るだけ避けたいのですが。

以上、よろしくお願い致します。

お世話になっております。
現在、Windows XP、VC++2005 にてプログラム中なのですが、
「strcpy()」についてです。

本ライブラリはセキュリティ強化のため「strcpy_s()」の使用を
奨励されていますが、箇所が多いので取り合えずWarningだけでも
取りたいと思っています。

--
#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
charszBuf[10];
strcpy( szBuf, "test" );

return 0;
}
--

というサンプルコードに対して

warnin...続きを読む

Aベストアンサー

stdafx.hがあるならstdafx.hに
#define _CRT_SECURE_NO_DEPRECATE
を記述されたら良いと思います

QAES暗号にて、AES_set_encrypt_keyで設定されるAES_KEYについて

VC++2008にてopensslを用いて、AES暗号/復号の機能を作成しています。

AES_set_encrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_ENCRYPT)にて暗号、
AES_set_decrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_DECRYPT)にて復号するコーディングをしました。

(http://d.hatena.ne.jp/hnko/20090302/1235977892のenc_aes128_cbc_test()を参考にしましたので、
一連の流れは、こことほぼ同じです)

デバッグしてみると、一見、暗復号が問題なく出来ていたので、
AES_set_encrypt_key関数の第一引数のkey配列の値と、
ivec配列の値を変えて、デバッグしてみたところ、
key配列を変更すると、暗号化後の文字列も変更されますが、
ivec配列を変更しても、暗号後の文字列に変化が有りませんでした。

調べてみたところ、AES_set_encrypt_keyにて返される
AES_KEYのroundsの値が常に同じであることが原因と思われますが、
roundsの値が常に一定だと、暗号解読が比較的容易に
出来てしまうと思うのですが、上記で挙げたサイトでの
コーディングの他に、何か別にコーディングを足さなければならないのでしょうか?

よろしくお願いします。

VC++2008にてopensslを用いて、AES暗号/復号の機能を作成しています。

AES_set_encrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_ENCRYPT)にて暗号、
AES_set_decrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_DECRYPT)にて復号するコーディングをしました。

(http://d.hatena.ne.jp/hnko/20090302/1235977892のenc_aes128_cbc_test()を参考にしましたので、
一連の流れは、こことほぼ同じです)

デバッグしてみると、一見、暗復号が問題なく出来ていたので、
AES_set_encrypt_key関数の第一引...続きを読む

Aベストアンサー

>ivec配列を変更しても、暗号後の文字列に変化が有りませんでした。
初期ベクタを変えれば必ず暗号文が変化する筈。
変わらないとしたら、初期ベクタを変えているつもりで変わってないだけ。

因みに、初期ベクタは、1ブロック暗号化するたびに内容が更新されていくので、使い方を間違えないように。

>roundsの値が常に一定だと、暗号解読が比較的容易に
暗号鍵を変えればAES_KEYの内容も変化する筈。
変わらないとしたら、暗号鍵を変えているつもりで変わってないだけ。

Q(Win32 API)LB_GETITEMDATAメッセージの戻り値

例えば、LB_HASSTRINGSスタイルのリストボックスから
SendMessage(hListBox, LB_GETITEMDATA, 0, 0);
として、リストボックスの0番目の文字列を取得したいときに、戻り値はどんな値でどのように格納すればよいのでしょうか?

英語のMSDNを見たところ、LB_ADDSTRINGやLB_INSERTSTRINGで設定した値が返る、というようなことが書かれていますが、

strcpy(CHAR testStr[1000], SendMessage(hListBox, LB_GETITEMDATA, 0, 0));
とすると「問題が発生したため終了」となって、

LPSTR testStr = SendMessage(hListBox, LB_GETITEMDATA, 0, 0);
とすると、
MessageBox(NULL, testStr, NULL, MB_OK);
で試しに表示してみると、何も表示されないメッセージボックスが表示されます。

ソースだけでもいいのでお願いします。

例えば、LB_HASSTRINGSスタイルのリストボックスから
SendMessage(hListBox, LB_GETITEMDATA, 0, 0);
として、リストボックスの0番目の文字列を取得したいときに、戻り値はどんな値でどのように格納すればよいのでしょうか?

英語のMSDNを見たところ、LB_ADDSTRINGやLB_INSERTSTRINGで設定した値が返る、というようなことが書かれていますが、

strcpy(CHAR testStr[1000], SendMessage(hListBox, LB_GETITEMDATA, 0, 0));
とすると「問題が発生したため終了」となって、

LPSTR testStr = SendMessage(...続きを読む

Aベストアンサー

>英語のMSDNを見たところ、LB_ADDSTRINGやLB_INSERTSTRINGで設定した値が返る、というようなことが書かれていますが、

えー?そんなこと書かれてないですよ(^^;
このメッセージはアイテムに関連付けた32ビット値を取得するもので、文字列を取っくるのが目的なら
LB_GETTEXT 使いましょう。

LB_GETITEMDATA / LB_SETITEMDATAはそのアイテムにユーザ定義の何らかの32bit値を保存、取得する場合に使います。例えば構造体のアドレスとか…。

QC言語win32api、エディットボックスから文字列を取得しメッセージ

C言語win32api、エディットボックスから文字列を取得しメッセージボックスへ出力
質問1
エディットボックスからフォーカスが外れると
その中の文字列を取得しメッセージボックスに出力したいのですが
思った通りに出力されません。
フォーカスが外れるとメッセージボックス自体は出てくるのですが
エディットボックスに入力した文字列が出力されません。
いろいろ試したんですが文字化けしたり文字列自体が表示されなかったします。
取得と出力の方法を教えていただけませんでしょうか。

kwt[3]=CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("EDIT"), NULL ,
WS_CHILD | WS_VISIBLE |WS_BORDER |ES_LEFT | ES_AUTOHSCROLL ,
90 , 85 , 110 , 25 ,
hAdd ,(HMENU)EDIT_ID02 ,((LPCREATESTRUCT)(lp))->hInstance , NULL);

LPSTR testtex=NULL;

LRESULTCALLBACK SubProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp)
{

LPSTR testtex=NULL;

switch(msg)
{
case WM_COMMAND:

switch(LOWORD(wp))
{

case EDIT_ID02:

if(HIWORD(wp)==EN_KILLFOCUS) //フォーカスが外れたら次の処理をする。
{

strText = (LPSTR)malloc(GetWindowTextLength(hwnd) + 2); //文字数分のメモリを確保

if(testtex) //testtexがゼロでなければ次の処理をする
{
GetWindowText(hwnd , testtex , GetWindowTextLength(hwnd) + 2); //エディットのテキストを取得。問題個所
MessageBox(hwnd , testtex , TEXT("") , MB_OK); //取得したテキストをメッセージボックスで出力。問題個所
}
free(strText); //メモリを解放

return 0;
}

return 0;
}

return 0;
}

return (CallWindowProc(SubP1, hWnd, msg, wp, lp));
}

質問2
エディットボックスに0~9と「.」(ドット)のみを入力できるようにしたいのですが
ウインドウスタイルでES_NUMBERを指定すると「.」が入力できなくなってしまいます。
どのように回避したらいいのでしょうか。

質問3
win32apiとは直接関係ありませんが、たとえば計算結果が1000億を超えるような場合
int型とかの変数ではとても入りきれません。
こういった場合どのようにするのでしょう。

C言語win32api、エディットボックスから文字列を取得しメッセージボックスへ出力
質問1
エディットボックスからフォーカスが外れると
その中の文字列を取得しメッセージボックスに出力したいのですが
思った通りに出力されません。
フォーカスが外れるとメッセージボックス自体は出てくるのですが
エディットボックスに入力した文字列が出力されません。
いろいろ試したんですが文字化けしたり文字列自体が表示されなかったします。
取得と出力の方法を教えていただけませんでしょうか。

kwt[3]=CreateWindowEx(W...続きを読む

Aベストアンサー

回答No.3の補足です。

////////// BEGIN{ midugane さんのコード } //////////

strText = (LPSTR)malloc(GetWindowTextLength(hwnd) + 2); //文字数分のメモリを確保

if(testtex) //testtexがゼロでなければ次の処理をする
{
GetWindowText(hwnd , testtex , GetWindowTextLength(hwnd) + 2); //エディットのテキストを取得。問題個所
MessageBox(hwnd , testtex , TEXT("") , MB_OK); //取得したテキストをメッセージボックスで出力。問題個所
}
free(strText); //メモリを解放

////////// END{ midugane さんのコード } //////////

////////// BEGIN{ 修正後 } //////////

LPTSTR strText = (LPTSTR)calloc((GetWindowTextLength(hwnd) + 1), sizeof(TCHAR)); // 文字数 + 終端 null 文字分のメモリを確保
// GetWindowTextLength( ) の戻り値は TCHAR 単位の文字数で返ってくるので、
// TCHAR = wchar_t となる Unicode 環境では注意が必要です。
// 確保したメモリは最初からゼロクリアしておいたほうが何かと便利なので、
// calloc( ) を使っています。
// VC++ では、calloc( ) は最適化されていますので、malloc( ) と比較しても
// 速度面のオーバーヘッドは気にしなくても良いレベルです。

if(strText) // strText が NULL でなければ次の処理をする
{
GetWindowText(hwnd, strText, (GetWindowTextLength(hwnd) + 1)); // エディットのテキストを取得。長さには終端 null 文字分を含めます。
MessageBox(hwnd, strText, TEXT(""), MB_OK); // 取得したテキストをメッセージボックスで出力。
}
free(strText); // メモリを解放

////////// END{ 修正後 } //////////

回答No.3の補足です。

////////// BEGIN{ midugane さんのコード } //////////

strText = (LPSTR)malloc(GetWindowTextLength(hwnd) + 2); //文字数分のメモリを確保

if(testtex) //testtexがゼロでなければ次の処理をする
{
GetWindowText(hwnd , testtex , GetWindowTextLength(hwnd) + 2); //エディットのテキストを取得。問題個所
MessageBox(hwnd , testtex , TEXT("") , MB_OK); //取得したテキストをメッセージボックスで出力。問題個所
}
free(strText); //メモリを解放

////////// END{ midugane さ...続きを読む


人気Q&Aランキング

おすすめ情報