关于多线程编程的问题

现在正在开发一个小程序,需要从VMIC实时网上接收数据,然后进行组包再从4个RS422串口发出,过程中需要显示一部分数据,
遇到的问题是会有丢包现象,发包的周期是5ms。现在整体的结构是显示单独一个线程、实时网接受数据一个线程并采用while(1)死循环接受,因为发送端更新数据比较快,0.5ms一次所以采用这种方式,然后每个串口数据的组包和发送分别一个线程。没有设定线程优先级,请问可以从哪些地方改良。

根据你的数据量以及串口的波特率算下。比如56k的串口,除以9(8+1停止位),得到的是每秒钟最大传输率,只有几k
如果这个限制导致的,多线程也没用

while(1)死循环接收最好加一个较短的延时,否则4个发送线程能得到的执行时间很少。

根据你的通信量,要想不丢包,必须使用异步式+数据池。
1、也即收网络数据,必须使用异步接收数据。这样的好处是既不会占用过多的CPU导致发送部份发不出来;也不会导致Sleep的时间过长,导致网络接收缓冲过小导致丢包。
2、接收到的数据放入一个较大的数据池,这样的好处是防止瞬间的网络并发高峰。建议使用以空间换性能的方法,不要每次都上锁。
3、发送的线程应该采用通知式的,即数据池内有数据才会启动,这样性能较快。哪怕Sleep(1)也还是要延时的了。
4、最后切记:死循环内部,建议使用事件通知,最快,系统负担最小。最简单使用Sleep,不至于将CPU全部吃掉,但响应稍慢,系统负担也要大些。