【2012年终总结】之四 获得CPU信息,剪贴板

 

 

//getCPUNumber.cpp

 1 //用来存储信息
 2 DWORD deax;
 3 DWORD debx;
 4 DWORD decx;
 5 DWORD dedx;
 6 
 7 void ExeCPUID(DWORD veax)//初始化CPU
 8 {
 9     __asm
10     {
11         mov eax,veax
12             cpuid
13             mov deax,eax
14             mov debx,ebx
15             mov decx,ecx
16             mov dedx,edx
17     }
18 }
19 
20 long GetCPUFreq()//获取CPU频率,单位: MHZ
21 {
22     int start1,start2;
23     _asm rdtsc
24         _asm mov start1,eax
25         Sleep(50);
26     _asm rdtsc
27         _asm mov start2,eax
28         return (start2-start1)/50000;
29 }
30 
31 string GetManID()//获取制造商信息
32 {
33     char ID[25];//存储制造商信息
34     memset(ID,0,sizeof(ID));//先清空数组 ID
35     ExeCPUID(0);//初始化
36     memcpy(ID+0,&debx,4);//制造商信息前四个字符复制到数组
37     memcpy(ID+4,&dedx,4);//中间四个
38     memcpy(ID+8,&decx,4);//最后四个
39     //如果返回 char * ,会出现乱码;故返回 string 值
40     return string(ID);
41 }
42 
43 string GetCPUType()
44 {
45     const DWORD id = 0x80000002; //从0x80000002开始,到0x80000004结束
46     char CPUType[49];//用来存储CPU型号信息
47     memset(CPUType,0,sizeof(CPUType));//初始化数组
48 
49     for(DWORD t = 0 ; t < 3 ; t++ )
50     {
51         ExeCPUID(id+t);
52         //每次循环结束,保存信息到数组
53         memcpy(CPUType+16*t+ 0,&deax,4);
54         memcpy(CPUType+16*t+ 4,&debx,4);
55         memcpy(CPUType+16*t+ 8,&decx,4);
56         memcpy(CPUType+16*t+12,&dedx,4);
57     }
58 
59     return string(CPUType);
60 }
61 
62 
63 CString GetMac_SN()
64 { 
65     unsigned long s1,s2;
66     CString str;
67 
68     __asm
69     {
70         mov eax,0x01
71             xor edx,edx
72             cpuid
73             mov s1,edx
74             mov s2,eax
75     } 
76     
77     str.Format(_T("%08X%08X"), s1, s2); 
78 
79     return str;
80 }

 

 

//使用上面的函数

 1 void CgetCPUNumberDlg::OnBnClickedButton2()
 2 {
 3     // TODO: 在此添加控件通知处理程序代码;
 4 
 5     CString strCPUID = GetMac_SN();
 6 
 7     CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
 8     pEdit->SetWindowText(strCPUID); 
 9 
10     CEdit* pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2);
11 
12     long nFreq = GetCPUFreq();      //主频;
13     string strMaker = GetManID();   //制造商;
14     string strModel = GetCPUType(); //型号;
15 
16     CString str("本机CPU信息如下:\r\n\r\n");
17     CString strTemp;
18     strTemp.Format(_T("%d"), nFreq);
19 
20     str += "主频:";
21     str += strTemp;
22 
23     str += "\r\n\r\n";
24     str += "制造商:";
25     str += CString(strMaker.c_str());
26 
27     str += "\r\n\r\n";
28     str += "型号:";
29     str += CString(strModel.c_str());
30 
31 
32     pEdit2->SetWindowText(str);
33 
34 }

 

 

 

//复制到剪贴板

 1 void CgetCPUNumberDlg::OnBnClickedButton1()
 2 {
 3     // TODO: 在此添加控件通知处理程序代码;
 4 
 5     BOOL ret = OpenClipboard();
 6     if (ret != TRUE)
 7     {
 8         AfxMessageBox(_T("打开剪贴板失败!"));
 9         return;
10     }
11 
12     EmptyClipboard();
13 
14     HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, 1024);
15 
16     LPVOID pMem = GlobalLock(hMem);
17 
18     char* pBuf = (char*)pMem;
19 
20     CString strCPUID;
21     GetDlgItemText(IDC_EDIT1, strCPUID);
22 
23     int i = 0;
24     int len = strCPUID.GetLength();
25     char chArray[1024] = {0}; 
26 
27     for (i = 0; i < len; ++ i )
28     {
29         chArray[i] = strCPUID.GetAt(i);
30     }
31     chArray[i] = '\0';
32 
33     strcpy_s(pBuf, (len + 1) * sizeof(char), chArray);  //把EDIT控件中的数据拷贝至指针指向的内存区域;
34 
35     GlobalUnlock(hMem);
36 
37 
38     HANDLE hClipboard = SetClipboardData(CF_TEXT, hMem);
39 
40     CloseClipboard();
41 }

 

 

 

  

 

 

转载于:https://www.cnblogs.com/cuish/archive/2013/02/06/2905855.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于LSTM的财务因子预测选股模型LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值