1)线程1中收到串口数据,把它追加到一个缓冲队列中区(例如用C++的vector、queue),或者直接复制到预留的缓冲区(C常用的环形缓冲区)都可以,做完memcpy或者pushback。你现在这么弄也行。 2)通知你可以简单的用一个boolean或者用event,结合WaitForSingleObject 3)我所说的块存储就是我一再强调的不要随读随写,要以32K或64K为单位,减少对于Flash的写次数,无论是flash还是传统的磁盘零散数据写都是效率不高的。 对于你现在的情况,不要管那么多,修改你得CommDealTread线程,把LeaveCriticalSection(&g_cs);句前提挪到m_str.ReleaseBuffer();后就应该可以有效解决你的问题。
[quote=引用 6 楼 9527 的回复:] 想了想,楼主应该是和我之前一个同事一样,在串口接收线程中堵塞的写文件了,和什么SD卡之类一点关系都没。。。这种做法绝对是不行的,开两个线程吧
[quote=引用 15 楼 9527 的回复:] [quote=引用 14 楼 lxh1244 的回复:] [quote=引用 13 楼 9527 的回复:] 最简单的优化方式,把你写入时候的临界保护修改为仅仅从串口数据缓冲区读时进行,不要扩大化到写入操作后。另外,你显然也没有按照块数据写的方式,不要频繁操作IO
[quote=引用 14 楼 lxh1244 的回复:] [quote=引用 13 楼 9527 的回复:] 最简单的优化方式,把你写入时候的临界保护修改为仅仅从串口数据缓冲区读时进行,不要扩大化到写入操作后。另外,你显然也没有按照块数据写的方式,不要频繁操作IO
[quote=引用 9 楼 lxh1244 的回复:] [quote=引用 6 楼 9527 的回复:] 想了想,楼主应该是和我之前一个同事一样,在串口接收线程中堵塞的写文件了,和什么SD卡之类一点关系都没。。。这种做法绝对是不行的,开两个线程吧
想了想,楼主应该是和我之前一个同事一样,在串口接收线程中堵塞的写文件了,和什么SD卡之类一点关系都没。。。这种做法绝对是不行的,开两个线程吧
SD卡的读写不会慢到这种程度吧?如果数据量不大的话可以先接收完在慢慢写试试看
[quote=引用 13 楼 9527 的回复:] 最简单的优化方式,把你写入时候的临界保护修改为仅仅从串口数据缓冲区读时进行,不要扩大化到写入操作后。另外,你显然也没有按照块数据写的方式,不要频繁操作IO
最简单的优化方式,把你写入时候的临界保护修改为仅仅从串口数据缓冲区读时进行,不要扩大化到写入操作后。另外,你显然也没有按照块数据写的方式,不要频繁操作IO
没有设置数据的起始和结束位,只是下位机以240个字节作为一帧发送到wince系统。现在主要的问题是SD卡存储数据速度太慢造成数据的丢失,请问我怎么解决这一问题?现在正在实验一种方法就是在程序中开了两个线程,一个线程用于读串口数据,另外一个线程用于将数据保存的SD卡中,其中防止来年改革线程对数据操作混乱,用了CStringList类,读到的数据添加到CStringList的头,写的时候从CStringList尾部进行截取。但是结果还是不对????怎么办?
1,317
社区成员
8,874
社区内容
加载中
试试用AI创作助手写篇文章吧