用windows api 写串口,现在能实现同步或异步读写串口,但是如何实现收到一个字符自动进中断这种方式,因在main函数中需要做其他任务 谢谢
可以用多线程。创建一个线程,线程中循环读取串口,一旦读到数据立即做出相应的响应
不知道你这个问题是否已经解决, 如果还没有解决的话:函数申明及参数
程序作出反应的函数,共4个参数。
//格式一定,参数类型不能更改,函数名、参数名可更改
LRESULT CALLBACK WinSunProc(
HWND hwnd, //窗口的句柄
UINT uMsg, //消息的标识
WPARAM wParam, //附加参数
LPARAM lParam //附加参数
)
(注:格式一定,可直接引用)
函数体
{
switch(uMsg)
{
case WM_CHAR: //用户按下键盘上的某个按键,并弹窗提示
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"提示",MB_OK);
break;
case WM_LBUTTONDOWN: //用户按下鼠标左键,弹窗提示并打印在窗口内
MessageBox(hwnd,"mouse clicked","提示",MB_OK);
HDC hdc;
hdc = GetDC(hwnd);
TextOut(hdc,0,50,"计算机左键已按下",strlen("计算机左键已按下")); //0和50是基于窗口而打印的位置
ReleaseDC(hwnd,hdc); //若不释放,则会造成内存泄露!
break;
case WM_PAINT: //窗口重绘(窗口水平、竖直发生变化时都会发生窗口重绘)
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"窗口重绘",strlen("窗口重绘")); //打印文本
EndPaint(hwnd,&ps); //注意及时结束重绘!
break;
case WM_CLOSE: //点击关闭按钮时,做出反应
if(IDYES == MessageBox(hwnd,"是否真的结束?","提示",MB_YESNO))
{
DestroyWindow(hwnd); //销毁窗口
}
break;
case WM_DESTROY: //窗口销毁时,接收到销毁消息
PostQuitMessage(0); //结束程序
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam); //对不感兴趣的消息进行缺省处理(注:该部分不可以删除,否则窗口不能正常显示)
}
return 0;
}