当dio_read()函数在读取串口的数据.当有数据被读取时,dio_read()读完,这个函数执行结束,而没有事据时程序一直在等待.没有数据时,我们有什么办法让它等待限定时间,自动退出.
是不是可以设置超时呢,如何设置?

解决方案 »

  1.   

    似乎不好办,如果要对串口设备进行读写操作.建议用C/S结构的程序吧.用两个数据库表,一个读取信息的表(table1),一个发送信息的表(table2).
    读取消息:C/S程序定时读取串口设备的数据至table1,在php中读取table1中的数据,读取后就设置已读,并用meta设置固定时间重定向,定时读取未读的记录.发送消息:php程序写入记录至table2中,C/S程序定时读取table2中未发送的记录,并写入串口设备.
      

  2.   

    dio_read本身没法设置timeout.考虑怎么把这个线程杀掉吧.php.ini里的timeout不行?
      

  3.   

    There is no way to specify a timeout or do a non-blocking read on Windows. http://cn.php.net/manual/en/function.dio-read.php#66314手册上在讲啊...
      

  4.   

    如果我没记错~用 non blocking mode 就可以
    很久没玩串口了 =_=
      

  5.   

    $fd = dio_open('COM3:',O_RDWR|O_NOCTTY|O_NONBLOCK);
    这样用吗?
    我这样试了一下,还是一样,没有读到数据就一直等待.
      

  6.   

    当dio_read()函数在读取串口的数据.当有数据被读取时,dio_read()读完,这个函数执行结束,而没有事据时程序一直在等待.没有数据时,我们有什么办法让它等待限定时间,自动退出. 
    是不是可以设置超时呢,如何设置?
      

  7.   

    我的系统是 windows 2003.
      

  8.   

    做不到就不退出啦
    长期维持一个PHP进程不停读取串口(每次1字节)
    所有读取的数据不处理
    写入一个档案
    由其它进程处理其实就是给他加一个buffer =.=
      

  9.   

    dio_read本身没法设置timeout.考虑怎么把这个线程杀掉吧.php.ini里的timeout不行?