vc程序 cpu占用率太大怎么办
#include <Windows.h>
#include <Windows.h>
#include <process.h>
#include <iostream>
#include <sapi.h>
#include "resource.h"
#include "CH341DLL.H"
#pragma comment(lib,"ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll
#pragma comment(lib,"sapi.lib") //sapi.lib在SDK的lib目录,必需正确配置
#pragma comment(lib, "WINMM.LIB")
#pragma comment(lib, "CH341DLL.lib")
using namespace std;
DWORD WINAPI myThreadfuc(LPVOID lpParameter);//线程函数声明
VOID CALLBACK mPCH341_NOTIFY_ROUTINE1(ULONG iEventStatus );//对设备通知事件的回调程序声明,注意须加callback
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam) ;
VOID WINAPI CALLBACK mPCH341_NOTIFY_ROUTINE1(ULONG iEventStatus );//341拔插检测处理函数 声明
void WINAPI CALLBACK myInterruptEvent1 ( unsigned long PinStatus );//对中断回调的声明
DWORD ThreadID1=0;//定义子线程id
DWORD ThreadID2=0;//定义主线程id
HWND hDlg_main =NULL;
BOOL flag1=TRUE ;//定义全局变量标志位一
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
CH341SetDeviceNotify(0,NULL, mPCH341_NOTIFY_ROUTINE1) ;//打开usb拔插监视
//ThreadID2=GetCurrentThreadId();//获取主线程线程id
HANDLE hThread = CreateThread(NULL,0,myThreadfuc,NULL ,NULL,&ThreadID1);
//启动一个线程供ch341采集数据使用
return DialogBox (hInstance, (LPCTSTR)IDD_DIALOG1, NULL, (DLGPROC)AboutDlgProc) ;//建立界面
}
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam)//对话框窗口处理函数
{
ISpVoice * pVoice = NULL;//进行语音配置
//COM初始化:
if (FAILED(::CoInitialize(NULL)))
return FALSE;
//获取ISpVoice接口:
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
wchar_t *pwc=L"设备已打开!";//定义一个宽字符指针
wchar_t *pwc4=L"设备已拔出!";//定义一个宽字符指针
wchar_t *pwc5=L"设备已插入,请先打开设备!";//定义一个宽字符指针
wchar_t *pwc6=L"暂无消息!";//定义一个宽字符指针
wchar_t *pwc7=L"打开设备失败,检查是否插入设备!";//定义一个宽字符指针
wchar_t *pwc8=L"设备已关闭!";//定义一个宽字符指针
hDlg_main = hDlg ;
ULONG iDevIndexAndEvent;
switch (message)
{
case WM_INITDIALOG ://初始化对话框
return TRUE ;
//case WM_VSCROLL ://从中断处接受命令和数据
case WM_HSCROLL://对设备拔插状态的处理
iDevIndexAndEvent=wParam;
switch(iDevIndexAndEvent)
{
case CH341_DEVICE_ARRIVAL :
//pVoice->Speak(L"设备已插入!", 0, NULL);
//::CoUninitialize();
//PlaySound(TEXT ("18.wav"), NULL, SND_FILENAME | SND_ASYNC );
SetDlgItemText(hDlg,IDC_STATICzhutai,pwc5);
break ;
case CH341_DEVICE_REMOVE:
//pVoice->Speak(L"设备已拔出!", 0, NULL);
//::CoUninitialize();
//PlaySound(TEXT ("17.wav"), NULL, SND_FILENAME | SND_ASYNC );
SetDlgItemText(hDlg,IDC_STATICzhutai,pwc4);
SetDlgItemText(hDlg,IDC_STATICmessge,pwc6);
break ;
}
return TRUE ;
case WM_KEYUP:
return TRUE ;
case WM_COMMAND ://用于处理从对话框控件发来的消息
switch (LOWORD (wParam))
{
case IDOK :
flag1=false ;
SetDlgItemText(hDlg,IDC_STATICmessge,pwc6);
return TRUE ;
case IDCANCEL :
EndDialog (hDlg, 0) ;
return TRUE ;
case IDC_BUTTONopen :
CH341OpenDevice(0) ;//打开设备
if( CH341SetOutput(0,15,0,1024)!=true)//设置端口为输入
{
SetDlgItemText(hDlg,IDC_STATICzhutai,pwc7);
break;
}
CH341SetIntRoutine( 0,myInterruptEvent1 ); // 设置中断服务程序
SetDlgItemText(hDlg,IDC_STATICzhutai,pwc);
SetDlgItemText(hDlg,IDC_STATICmessge,pwc6);
return TRUE ;
case IDC_BUTTON2 :
CH341CloseDevice(0);
SetDlgItemText(hDlg,IDC_STATICzhutai,pwc8);
SetDlgItemText(hDlg,IDC_STATICmessge,pwc6);
return TRUE ;
}
break ;
}
return FALSE ;
}
DWORD WINAPI myThreadfuc(LPVOID lpParameter)//定义线程函数
{
MSG msg;//
ULONG interruptnum,newinterruptnum;
wchar_t *pwc1=L"一号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc2=L"二号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc3=L"三号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc4=L"四号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc5=L"五号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc6=L"六号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc7=L"七号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc8=L"八号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc9=L"九号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc10=L"十号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc11=L"十一号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc12=L"十二号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc13=L"十三号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc14=L"十四号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc15=L"十五号桌要点菜!";//定义一个宽字符指针
wchar_t *pwc16=L"十六号桌要点菜!";//定义一个宽字符指针
while(GetMessage(&msg,NULL,0,0))
{
switch (msg.message)
{
case WM_KEYDOWN:
flag1=TRUE;
interruptnum=msg.wParam;
newinterruptnum=(interruptnum&15);
switch( newinterruptnum )
{
case 1 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc1);
//while (flag1)
{
PlaySound(TEXT ("1.wav"), NULL, SND_FILENAME | SND_NOSTOP);
}
flag1=TRUE;
break;
case 2 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc2);
//while(flag1)
{
PlaySound(TEXT ("2.wav"), NULL, SND_FILENAME | SND_LOOP);
}
flag1=TRUE;
break;
case 3 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc3);
while(flag1)
{
PlaySound(TEXT ("3.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 4 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc4);
while(flag1)
{
PlaySound(TEXT ("4.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 5 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc5);
while (flag1)
{
PlaySound(TEXT ("5.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 6 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc6);
while(flag1)
{
PlaySound(TEXT ("6.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 7 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc7);
while(flag1)
{
PlaySound(TEXT ("7.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 8 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc8);
while(flag1)
{
PlaySound(TEXT ("8.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 9 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc9);
while (flag1)
{
PlaySound(TEXT ("9.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 10 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc10);
while(flag1)
{
PlaySound(TEXT ("10.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 11 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc11);
while(flag1)
{
PlaySound(TEXT ("11.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 12 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc12);
while(flag1)
{
PlaySound(TEXT ("12.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 13 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc13);
while (flag1)
{
PlaySound(TEXT ("13.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 14 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc14);
while(flag1)
{
PlaySound(TEXT ("14.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 15 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc15);
while(flag1)
{
PlaySound(TEXT ("15.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
case 16 :
SetDlgItemText(hDlg_main,IDC_STATICmessge,pwc16);
while(flag1)
{
PlaySound(TEXT ("16.wav"), NULL, SND_FILENAME | SND_SYNC);
}
flag1=TRUE;
break;
}
}
}
return 0;
}
VOID WINAPI CALLBACK mPCH341_NOTIFY_ROUTINE1(ULONG iEventStatus )//定义拔插检测的回调函数
{
HWND ch341hwnd ;
ch341hwnd =hDlg_main ;
PostMessage(ch341hwnd,WM_HSCROLL,iEventStatus,0); //在中断向窗口处理函数发送回调消息
}
void WINAPI CALLBACK myInterruptEvent1 ( unsigned long PinStatus ) //中断回调处理程序
{
PostThreadMessage(ThreadID1 ,WM_KEYDOWN,PinStatus ,0);//向子线程消息循环队列发送回调消息
}
/*void error(LPSTR lpszFunction)
{
CHAR szBuf[80];
DWORD dw = GetLastError();
sprintf(szBuf, "%s failed: GetLastError returned %u\n",
lpszFunction, dw);
MessageBox(NULL,szBuf, TEXT("Error"), MB_OK);
ExitProcess(dw);
} */