0. 不知道楼主对我前面的建议有何看法?
1. 设定一个足够大的数组(缓冲区): Data_Array, 一个锁 Data_Lock;
2. N个Socket接收线程A, 每个线程接收到数据后:
Socket.Receive a data...
Data_Lock.Lock;
Write_data to Data_Array; // 这个处理麻烦一点, 是的, N个线程都要往Data_Array里写数据, 但这里速度飞快, 不用担心, 多线程中的数据锁就是解决这个问题的;
Data_Lock.Unlock;
3. 一个独立的线程B不断的循环从Data_Array中取(读)数据(也要Data_Lock), 写到硬件中;
Data_Lock.Lock;
Get_Data from Data_Array; // 这个处理麻烦一点
Data_Lock.Unlock;
Write Data to your hardware...
4. 并不存在A调用B的说法;
5. 要协调好数据(同步好数据), 要注意几点: 缓冲区(数组)足够大, 数组的读写指针移动问题要处理好(关键就是这里复杂一点点), 如果从Socket接收的数据总量速度>写到硬件设备中的速度, 冗余量>缓冲区的长度时,要考虑其他数据核对机制保证工作的完整性;
6. 从Data_Arrar读写数据速度非常快, 耗时可以忽略不计; 而真正耗时的是Socket接收与写数据到硬件设备中; 所以真正的Data_Lock只在从Data_Array中读写数据时使用,效率很高的.