一个被一直push_back()的list链表,怎样去读取其中的数据

酷爱冰红茶 2012-12-17 03:48:19
一个被一直push_back()的list链表,怎样去读取其中的数据。
问题如题,求解决,如果用读写锁,请手把手教教,不胜感激。
写操作在一个类的一个线程中,读操作在另一个类的线程中,list 为全局变量!

...全文
195 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
酷爱冰红茶 2012-12-18
  • 打赏
  • 举报
回复
list<KLINEDATAST *>::iterator Kend; // 定义结束迭代器 EnterCriticalSection(&g_cs); Kend=((*InstID)->k_list).end(); LeaveCriticalSection(&g_cs); //for(KDataIndex=(*InstID)->k_list.begin(); KDataIndex!=(*InstID)->k_list.end(); KDataIndex++) for(KDataIndex=(*InstID)->k_list.begin(); KDataIndex!=Kend; KDataIndex++) 我怎么试,都是在调用K_list.end 的时候内存错误,我在写的时候判断了,比如我读取m1305,就用关键代码段保护起来了。 利用互斥和事件太慢了,200多数据去写,等轮到一个读的时候时间太久了,根本轮不到! 纠结呀,卡在这了,进度都不能往下走了!
酷爱冰红茶 2012-12-17
  • 打赏
  • 举报
回复
引用 8 楼 xiaoxiaoyuyun 的回复:
用互斥体,然后WaitForSingleObject
恩恩,好的,明天开盘测试下!谢谢
酷爱冰红茶 2012-12-17
  • 打赏
  • 举报
回复
引用 7 楼 debugmonkey 的回复:
如果一个进程中 那么用关键段就可以实现 效率也不错 如果用Mutex 由于是内核对象 效率比CriticalSection差很大
谢谢,我知道了,就是得完成一个同步的过程,互斥,事件,关键代码段,解决这个问题,等明天开盘有数据了,测试下!在不影响读取的同时,还要保证写的数据完整性!
潇潇雨云 2012-12-17
  • 打赏
  • 举报
回复
用互斥体,然后WaitForSingleObject
debugmonkey 2012-12-17
  • 打赏
  • 举报
回复
如果一个进程中 那么用关键段就可以实现 效率也不错 如果用Mutex 由于是内核对象 效率比CriticalSection差很大
酷爱冰红茶 2012-12-17
  • 打赏
  • 举报
回复
引用 5 楼 happyparrot 的回复:
用互斥体,然后WaitForSingleObject
哦,那我CreatMutex()应该去创建全局的了,因为我读写在两个类中! 因为三点停盘了就没有数据了,很难测试,感谢大版的帮助,有问题继续请教!解决问题了立马结贴!
快乐鹦鹉 2012-12-17
  • 打赏
  • 举报
回复
用互斥体,然后WaitForSingleObject
酷爱冰红茶 2012-12-17
  • 打赏
  • 举报
回复
引用 3 楼 happyparrot 的回复:
这学习中就搞这么复杂的......
哎,没办法呀,我们是模拟做一个期货软件的行情数据,四家交易所,为了把当天的数据存放到链表中,提供客户端快速的请求数据,采用了,一个交易所一个list, 内容为 { 合约名字; 数据list(存放的是K线数据的结构体 ) } 我就是为了读取数据list中的K线结构体数据,但是,这个list在不断的被push_back(); 我明白大版的意思,就是读写都要判断对方的状态,避免冲突,就是不知道具体的用什么函数,还是用事件去处理!
快乐鹦鹉 2012-12-17
  • 打赏
  • 举报
回复
这学习中就搞这么复杂的......
酷爱冰红茶 2012-12-17
  • 打赏
  • 举报
回复
引用 1 楼 happyparrot 的回复:
加锁,就是在读写时都先判断该锁的状态,空闲时进行处理,同时锁定;处理完后解锁。
大版,我这实习学习中,菜呀,具体点,利用CCriticalSection g_lockSection ; 这个类的lock()Unlock()可否实现!还是用其他的API函数什么的! 我有四个线程同时调用一个函数去对260多个list进行写操作,我根据客户端的请求去读取对应的list, 如果读操作占用时间长了会不会影响写操作,怕数据丢失呀,锁上就拷贝到一个新的list中,然后慢慢读取,这样是不是也可以实现!
快乐鹦鹉 2012-12-17
  • 打赏
  • 举报
回复
加锁,就是在读写时都先判断该锁的状态,空闲时进行处理,同时锁定;处理完后解锁。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧