我自己编了一个 server/client,视频采集程序,
每当一个client连到server时,我就创建一个子线程,通常子线程创建之后就单独运行,我的这个程序是为了实现SERVER/CLIENT的实时通信,SERVER把采集到每一帧视频实时的发送到CLIENT,实现视频监控。
请问如何实现?不知道PostThreadMessage这个函数能不能用?
谢谢!

解决方案 »

  1.   

    定义一全局BUFFER,主线程采集到新的视频后把数据放到BUFFER里,然后让子线程把这个BUFFER发送出去不就OK了?可以采用事件通知方法啊什么的。也可以设置一个Flag全局变量,子线程定时检查Flag的值来判断是否有新的数据(不过效率好像不太高)
      

  2.   

    To: snsins(初雪是我的开心果) 
    这样,在子线程里就得设一个死循环,不断的检测是不是有新的数据?
      

  3.   

    不知道我的这样的想法好不好:
    建立两个BUFFER,一个放子线程给主线程的数据,另一个放主线程给子线程的数据,把这两个BUFFER和两个通告捆绑在一块,当有数据到时就给对应的线程发一个通告,其实我都是胡说的,我想没这么复杂,这些都是以前我写一个通信程序时用的.
      

  4.   

    PostThreadMessage是异步的吧。会有消息丢失的
      

  5.   

    凡是要用消息"通知"的,都难以做到实时。凡是要子线程"轮询"的,CPU占用率未免太高。最实时的,末过于让主线程直接调用子线程里的某个对象指针的函数。但这又破坏了封装性。
      

  6.   

    采用信号量, 创建一队列, 队列是阴塞的, 在put时, release一个信号量, 而在get中wait, 那么只要有消息到达, 都会及时得到处理的
      

  7.   

    To: Netsleeper(龙翔) 
    你所说的方法很好,
    怎样建立一个环状存储区?
    谢谢!
      

  8.   

    使用全局事件,一个进程创建,另一个进程打开,如:
    handle = CreateEvent(NULL,true,true,"global\\myevent");
    handle = OpenEvent(EVENT_ALL_ACCESS,false,"global\\myevent");数据可以通过内存文件进行转输:
    handle = CreateFileMapping((HANDLE)0XFFFFFFFF,NULL,PAGE_READWRITE,
            HIORDER_BUFFER_SIZE,LOORDER_BUFFER_SIZE,"global\\mymemory");
    pbuffer = MapViewOfFile(handle,FILE_MAP_ALL_ACCESS,HIORDER_BUFFER_SIZE,LOORDER_BUFFER_SIZE,
      0);handle = OpenFileMapping(.....)
    pbuffer = MapViewOfFile(....);pbuffer就是内存指针,具体过程看你自己的了。
      

  9.   

    开始我就说了:可以采用事件通知方法啊什么的。也可以设置一个Flag全局变量,子线程定时检查Flag的值来判断是否有新的数据(不过效率好像不太高)事件通知是最好的办法
    如果不用就轮训