首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

用 Victor 串口控件出现程序死掉,甚至电脑死机,蓝屏的有关问题

2013-01-06 
用 Victor 串口控件出现程序死掉,甚至电脑死机,蓝屏的问题.void __fastcall TForm14::btn_searchClick(TOb

用 Victor 串口控件出现程序死掉,甚至电脑死机,蓝屏的问题.



void __fastcall TForm14::btn_searchClick(TObject *Sender)
{
  TCommSerialPortInfo spi ;
  String s ;
  int com , rc ;
  int  r_len ;
  unsigned char check,temp[] = { 0x55,0xaa,0x90,0x09,0,0,0, 1 , 0 , 1 ,0xff } ;
  unsigned char r_data[1024] ;


  pb1->Max = spi.PortList->Count  ;

  for(int i=0; i<spi.PortList->Count ; i++)
   {
  com = spi.PortNo(spi.PortList->Strings[i]) ;
      pb1->Position = i+1 ;
  try
   {
 if( Form9->ybc1->Active )
Form9->ybc1->Active = false ;

 Application->ProcessMessages();

 Form9->ybc1->PortNo = com ;
 Form9->ybc1->Active = true;
 
  {
 lbl_info->Caption =  ( "查找串口: "+ spi.PortList->Strings[i])  ;
  }

 Form9->ybc1->Write(temp,10) ;
 for(int i=0 ; i < 30 ; i++ )
   {
 Sleep(10);
 Application->ProcessMessages();
   }
 r_len = Form9->ybc1->Read(r_data,1024) ; //收到 n 个字节

 if(r_len > 128)
  {

          }

 Form9->ybc1->Active = false ;
   }
  catch(Exception &e)
   {

 {
lbl_info->Caption = ("无法打开: "+ spi.PortList->Strings[i]) ;
 }
   }

  Application->ProcessMessages();
   }

  lbl_info->Caption = ("搜索结束!") ;
}




我这个写法有什么问题吗? 特别是有些USB转串口的很容易蓝屏.
我现在笔记本电脑上是这个 
Intel(R) Active Management Technology - SOL(COM4)
在IDE中运行的时,搜索到这个串口的时候经常是IDE无响应,当然程序也是无响应了,在任务管理器中都无法关闭.

[解决办法]
这种通信的操作最好放在一个单独的线程中,尽量降低崩溃后对其它操作的影响
[解决办法]
用nrcomm吧
www.ccrun.com上有9.16版本的。
[解决办法]
代码看起来好乱啊,为什么一定要去访问另一个窗口的控件呢?你的Victor指针类型应该是__published的吧?这个类型和public还是有点区别的呢!
另外你调用控件的Write操作时,好像长度也不对;
如果我是你的话,Form14窗口就只调用Form9的public函数去进行数据的发送和接受,而不是控件指针,这样可能就会有这么一个情况出现:Form9还没有构造出来,你就先去调用Form9的控件了,那指定会出问题。
[解决办法]
底层通信放在独立线程里面实现
放在FORM上会把主窗口锁住,调试时锁住IDE.
[解决办法]
引用:
Form是软件一启动就构造还是等第一次打开这个form时才构造的?

Form是一开始就已经创建好了的,但是它创建的时候是有顺序的,这个你可以看一下你的"工程名字.cpp"那个文件,你就会看到各个窗体的创建顺序。

[解决办法]
我今天也遇到这个问题,就是Victor控件本身的问题.
我试了将生成的应用程序设为管理员权限,好象可以了.不过不确定.说不定还要出来.
已经蓝屏好几次了.
------解决方案--------------------


直接用系统api函数读写串口试试?看看是不是串口转换器驱动不稳定导致蓝屏?
[解决办法]
是不是你通信连接线的问题。有的USB转串口通信芯片会造成这种问题,换个好一点的线,如果你是在用USB转串口线

热点排行