我做了个线程主要功能是:先判断串口是否打开,如果打开就关闭,然后再打开口,再然后配置串口,再进收发工做。在用USB转串口线的时候一切正常,但如果是台式机上自带的串口,关闭串口的时候,会占用大量时间,大概十多分钟。
请教大家这个问题怎么处理啊。
我关闭串口是用CloseHandle函数。

解决方案 »

  1.   


    UINT CSfdDlg::ThreadCom(LPVOID pParam)
    {
    CSfdDlg * pDlg=(CSfdDlg *)pParam;
    HANDLE hCom;
    hCom=INVALID_HANDLE_VALUE;
    while (1)
    {
    if (hCom !=INVALID_HANDLE_VALUE)
    {
    ::CloseHandle(hCom);
    }
    hCom=CreateFile("COM1",//COM1口
    GENERIC_READ|GENERIC_WRITE, //允许读和写
    0, //独占方式
    NULL,
    OPEN_EXISTING, 
    FILE_FLAG_OVERLAPPED, 
    NULL);
    if(hCom==(HANDLE)-1)
    {
    AfxMessageBox("打开COM失败!");
    }
    }}
      

  2.   

    竟然是while(1)
    这是干啥呢...
      

  3.   

    HANDLE hCom;
    不要保存在临时变量,保存成一个全局变量.
    打开com只需一次,程序需要关闭串口的时候closehandle之前保存的全局句柄就可以了.楼主你可以下一个网上封装好的串口类,先看看别人的代码,再自己尝试封装一个,以后就很熟练了.有一本书叫<Visual C++/Turbo C 串口通信编程实践>,下个电子版的看看
      

  4.   

    我不用线程,做两个按钮,一个打开,一个关闭,打开的代码就写一个CreateFile,关闭按钮就写一个CloseHandle,关闭的时候,也要好久,大概好几分钟才反应过来,这是为什么呀?