socket收到数据并写到共享内存后,投递一个通知,处理线程再去读这个共享内存那么接收数据的线程(主进程)不就要等这个读的线程返回,才能接收下一个数据包嘛?
写共享内存的不同位置

解决方案 »

  1.   

    一开始就启动这个读取线程,只不过它等待一个事件event,当主线程写入数据后,就触发这个event,读数据结束后,也发送一个event,通知主进程,数据读取结束
      

  2.   

    一个消息队列,一个锁,一个事件FD_READ事件中读到一个完整的数据包后,锁住,将数据包插入队列,解锁,触发一个事件一个线程waitsingleevent这个事件,等到事件后锁住,读取队列中所有的消息,清空队列,解锁,然后开始逐个处理消息包
      

  3.   

    请问共享内存怎么设计?  我觉得读取数据和写数据速度如果不一样,比如写入2条数据,然后读取线程才处理一条数据,照这样下去,可能会把还没读取的数据覆盖了。读内存比写内存要快,所以代码没bug的话,不应该存在这个问题。
    读数据的线程应该程序一开始就启动,而不是放在接收数据线程后。感觉你还没明白线程是怎么一回事。
      

  4.   

    请问共享内存怎么设计?  我觉得读取数据和写数据速度如果不一样,比如写入2条数据,然后读取线程才处理一条数据,照这样下去,可能会把还没读取的数据覆盖了。读内存比写内存要快,所以代码没bug的话,不应该存在这个问题。
    读数据的线程应该程序一开始就启动,而不是放在接收数据线程后。感觉你还没明白线程是怎么一回事。读取数据的线程是一开始就启动,然后挂起,在接收到数据的时候,在去调用。 我是开了一个线程专门接收数据,接收完之后去调用读线程,然后根据数据包类型进行处理,我想说如果在处理时,由于处理时间过长,导致把共享内存都写完了。那要怎么处理啊,虽然这个有点极端。。