解决方案 »

  1.   

    "比如有49个都是在100ms应答,而有1个是在1000ms时应答。"
    没关系啊, 定时器按最快应答 的 设置, 慢的 就是 多 询问几次.
    不建议开太多的线程.
      

  2.   

    "当收到应答后" 就是一个事件.50 个查询能不能 一起发出去(one by one), ? 
    然后等 应答 ?
      

  3.   

    楼主 你这个 1个上位机挂50个  多半是用的总线吧,不会用50个端口吧。既然用的总线,就一次性发送所有查询吧,下位机应答回来都有地址什么的标志把,你通过地址来判断是哪个下位机返回来的数据。不知道你的总线协议和下位机是否支持判断总线忙活着空闲,然后占用总线等一系列协议。你开线程也可以,如果你是多个端口的话 当然可以用多个线程,但是不要开太多,比如你要查询50个,你可以开10个线程 每个线程查询5个,但是这个都是基于你有多个端口的情况下的,如果你是总线,那么和下位机通信的只有1个端口,你就只有开一个线程。去发送接收, 你发送完了等待接收 用类似waitforsingleobject这种去等待即可,如果那边接收完了 就给信号让等待结束,马上就可以继续发  楼主还是说下接口环境,通信环境 才方便讨论问题
      

  4.   


    50个仪表,50个端口。各自管各自的,独立的。
    但之前的人说开线程太多是不是不太好。50个线程会有问题吗?
    还有,如果用线程的话,线程函数如何写呢?
    因为做的操作比较多,即通信次数较多。一发一收可以用waitforsingleobject等待信号,那如果有20次通信,我的线程函数,是否用顺序结构,一个等待一个,也就说调用waitforsingleobject等待20次?
      

  5.   

    、谢谢!
    还有,如果用线程的话,线程函数如何写呢?
    因为做的操作比较多,即通信次数较多。一发一收可以用waitforsingleobject等待信号,那如果有20次通信,我的线程函数,是否用顺序结构,一个等待一个,也就说调用waitforsingleobject等待20次?
      

  6.   

    这是线程函数与主函数的关系,线程函数是不退出的(while(1)),
    主函数叫他 发, 它 就发, 发完 等 回答, 回答 给 主函数 后, 等 主函数下个 命令。
      

  7.   


    50个仪表,50个端口。各自管各自的,独立的。
    但之前的人说开线程太多是不是不太好。50个线程会有问题吗?
    还有,如果用线程的话,线程函数如何写呢?
    因为做的操作比较多,即通信次数较多。一发一收可以用waitforsingleobject等待信号,那如果有20次通信,我的线程函数,是否用顺序结构,一个等待一个,也就说调用waitforsingleobject等待20次?50个端口。你居然不用总线
    这样吧 你加我QQ29485118  我们一起讨论下现在的问题  你这个中间涉及到同步的问题  只不过都好解决  如果你的编程语言是用的C++的话 我们可以一起解决,如果不是的话 我就帮不上你忙了。
      

  8.   


    我说的就是这个,岂不是主函数要waitforsingleobject等待线程的“事件”或者是“信号量”?
      

  9.   

    线程发 消息给 主函数.
    主函数不能waitforsingleobject,,,    界面会堵塞.
      

  10.   

    消息驱动,到底是主函数给线程函数发消息,还是线程函数给主函数发消息?他说的这个消息 和你说的这个消息 完全就是两码事。不就是系统消息吗,windows消息。有什么区别,用自定义消息实现线程间通信
      

  11.   


    我如何做这个主函数?
    说的直白一点,一个按钮,我单击按钮,调用一个函数MainProc()MainProc()该如何写?是写一个while(1)循环吗?然后等着收到消息就做相应操作?
      

  12.   

    主函数 与 你的 工程类型 有关。 单文档, 对话框, win32  
      

  13.   

    直接开51个线程就行了~反正大部分时间线程都是在Sleep的
      

  14.   

    搞一个小的PLC,例如S7-200,然后安装一个监控组态软件,如果货都到的话,估计1天搞定