激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月


主題:請幫忙分析一下

  共有45818人關注過本帖    
linman
1樓


請幫忙分析一下  發帖心情 Post By:2009-9-3 15:38:00   [只看該作者]

c#程序中設置了兩個線程,一個是CAN接收線程,一個是數據解析線程,它們公用一個buffer,接收線程等待數據進來就放入buffer,解析線程以5ms為周期從buffer中讀數進行解析;當以5ms為周期或更快速度發送數據時,從解析線程中讀這個buffer中的數據就不對了,比如連續發了id為0 、1、2的CAN數據,解析線程讀到的ID有可能是0、1、1,為什么會發生這種現象?兩個線程優先級都是abovenormal。

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
lqk
2樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2009-9-3 16:04:00   [只看該作者]

當以5ms為周期或更快速度發送數據時,CAN接收線程將以5ms或更快的速度刷新你的buffer,而你的數據解析線程以5ms為周期工作,這樣有數據就會丟失或出錯
建議在CAN接收線程中用一環形buffer緩存收到的數據。

  單帖管理 | 引用 | 回復 回到頂部
linman
3樓


  發帖心情 Post By:2009-9-3 16:26:00   [只看該作者]

可是如果解析的線程不讀走buffer中的數據,buffer不會被清阿?難道向buffer中添加新的數據會把以前的沖掉嗎?為什么環形buffer能解決問題呢?

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
lqk
4樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2009-9-3 17:10:00   [只看該作者]

在接收線程中,只要收到一幀數據就放入環形buffer中
在解析線程中解析環形buffer中的數據,一直將buffer中的數據讀空為止,對環buf操作時要注意線程同步.

  單帖管理 | 引用 | 回復 回到頂部
linman
5樓


  發帖心情 Post By:2009-9-3 18:12:00   [只看該作者]

我用的buffer是個ArrayList,接收線程只要收到數據就添加到ArrayList中,解析線程每次獲得ArrayList中的所有元素進行解析,然后清空,在對ArrayList進行添加和遍歷時用Mutex進行同步,這樣有問題嗎?

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
lqk
6樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2009-9-4 9:22:00   [只看該作者]

你的同步是不是在解析線程解析數據時,接收線程就不能向ArrayList添加數據了.我覺得這是根你兩個線程的配合有關系。

  單帖管理 | 引用 | 回復 回到頂部
linman
7樓


  發帖心情 Post By:2009-9-4 9:49:00   [只看該作者]

對,解析時不能添加,添加時解析也不能訪問,就是兩個線程在使用buffer時都先waitone(),使用后再ReleaseMutex(),請教應該怎么配合呢

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
lqk
8樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2009-9-4 10:49:00   [只看該作者]


數據接收線程:
bResult = CAN_GetNextReceivedFrame( ceCAN->m_hCAN, &ceCAN->RxMFrame );
if( bResult )
{
    memcpy( ceCAN->ReceiveBuf[ceCAN->m_bufPutIdx], &ceCAN->RxMFrame, 13 );
    ceCAN->m_bufPutIdx = ( ceCAN->m_bufPutIdx+1 )% BUF_MAX;
}

數據解析線程:
    while( m_bufGetIdx != m_bufPutIdx )
    {
        memcpy( buf, ReceiveBuf[m_bufGetIdx], i );
        //數據解析
        m_bufGetIdx = (m_bufGetIdx+1) % BUF_MAX;
    }

兩線程不需要同步

  單帖管理 | 引用 | 回復 回到頂部
linman
9樓


  發帖心情 Post By:2009-9-4 13:24:00   [只看該作者]

謝謝您的回復 ,主要我不明白為什么會發生這種現象?用環形為什么就能解決?另外,C#的話我要怎么構造呢?

  單帖管理 | 引用 | 回復 回到頂部
linman
10樓


  發帖心情 Post By:2009-9-4 13:43:00   [只看該作者]

是否需要一個標志用于同步兩個線程,是因為沒有做這個同步處理才導致發生這種現象嗎?

  單帖管理 | 引用 | 回復 回到頂部
qjh2008
11樓


  發帖心情 Post By:2009-9-8 14:54:00   [只看該作者]

使用serialport控件很好用的

  單帖管理 | 引用 | 回復 回到頂部
zhl
12樓


  發帖心情 Post By:2009-9-8 16:48:00   [只看該作者]

兩個不同的線程使用了一個數據區,應用程序中是需要加以保護的。

  單帖管理 | 引用 | 回復 回到頂部

返回首頁

請幫忙分析一下

用戶名:
            驗證碼: 驗證碼,看不清楚?請點擊刷新驗證碼
內容:
主站蜘蛛池模板: 欧美成人黑人xx视频免费观看| 亚洲a级| 国产成人精品视频一区二区不卡| 精品一区在线| 国产免费变态视频网址网站| 欧美日韩亚洲综合在线一区二区| 亚洲视频综合| xxx观看| 久久精品国产久精国产果冻传媒| 亚洲一级色片| 成人黄网大全在线观看| 欧美色欧美亚洲高清在线视频| 国产欧美视频一区二区三区| 黄色网址免费在线观看| jizzjiz熟丰满老妇日本| 黑人干亚洲| 久久久久久久国产免费看| 色精品一区二区三区| 亚洲女视频| 在线二区人妖系列| 91精品一区国产高清在线| 一区二区三区免费视频播放器| 久久综合九色综合97婷婷群聊| 中文国产成人精品少久久| 亚洲黄色免费看| 在线爱爱视频| 成年人免费观看网站| 免费观看的黄色| 欧美一级毛片一级毛片| 欧美高清夜夜片a| 国产91在线chines看| 国产日韩欧美在线播放| 国产极品美女网站在线观看| 国产精品久久久久久久久齐齐| 美国一级毛片视频| 特级片在线观看| 美女综合网| 视频一区二区在线播放| 网站在线观看| 亚洲国内精品久久| 亚洲精品高清在线一区二区三区|