青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

flagship的理想與現實

創新+實踐

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  8 Posts :: 0 Stories :: 27 Comments :: 0 Trackbacks

常用鏈接

留言簿(8)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

        現在我們已經有了三個可獨立工作的線程:資源加載線程、邏輯線程、渲染線程,下一步我們需要決定它們如何在實際的項目中相互配合,也就是所謂的應用程序框架了,該框架需要解決以下兩個問題
        首先,資源讀取線程可以簡單設計為一個循環等待的線程結構,每隔一段時間檢查加載隊列中是否有內容,如果有則進行加載工作,如果沒有則繼續等待一段時間。這種方式雖然簡單清晰,但卻存在問題,如果等待時間設得過長,則加載會產生延遲,如果設得過短,則該線程被喚醒的次數過于頻繁,會耗費很多不必要的CPU時間。
        然后,主線程是邏輯線程還是渲染線程?因為邏輯線程需要處理鍵盤鼠標等輸入設備的消息,所以我起初將邏輯線程設為主線程,而渲染線程另外創建,但實際發現,幀數很不正常,估計與WM_PAINT消息有關,有待進一步驗證。于是掉轉過來,幀數正常了,但帶來了一個新的問題,邏輯線程如何處理鍵盤鼠標消息?
      
        對于第一個問題,有兩種解決方案:
        第一,我們可以創建一個Event,資源讀取線程使用WaitForSingleObject等待著個Event,當渲染線程向加載隊列添加新的需加載的資源后,將這個Event設為Signal,將資源讀取線程喚醒,為了安全,我們仍需要在渲染線程向加載隊列添加元素,以及資源加載線程從加載隊列讀取元素時對操作過程加鎖。
        第二,使用在渲染線程調用PostThreadMessage,將資源加載的請求以消息的形式發送到資源價值線程,并在wParam中傳遞該資源對象的指針,資源加載線程調用WaitMessage進行等待,收到消息后即被喚醒,這種解決方案完全不需要加鎖。
        對于第二個問題,我們同樣可以用PostThreadMessage來解決,在主線程的WndProc中,將邏輯線程需要處理的消息發送出去,邏輯線程收到后進行相關處理。

        需要注意的是,我們必須搞清楚線程是在何時創建消息隊列的,微軟如是說:

The thread to which the message is posted must have created a message queue, or else the call to PostThreadMessage fails. Use one of the following methods to handle this situation.

  • Call PostThreadMessage. If it fails, call the Sleep function and call PostThreadMessage again. Repeat until PostThreadMessage succeeds.
  • Create an event object, then create the thread. Use the WaitForSingleObject function to wait for the event to be set to the signaled state before calling PostThreadMessage. In the thread to which the message will be posted, call PeekMessage as shown here to force the system to create the message queue.
    PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)
    Set the event, to indicate that the thread is ready to receive posted messages.

        看來,我們只需要在線程初始化時調一句PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)就可以了,然后在主線程中如此這般:

switch ( uMsg )
        
{
        
case WM_PAINT:
            
{
                hdc 
= BeginPaint(hWnd, &ps);
                EndPaint(hWnd, 
&ps);
            }

            
break;
        
case WM_DESTROY:
            
{
                m_pLogic
->StopThread();
                WaitForSingleObject( m_pLogic
->GetThreadHandle(), INFINITE );
                PostQuitMessage(
0);
            }

            
break;
        
default:
            
{
                
if ( IsLogicMsg( uMsg ) )
                
{
                    PostThreadMessage( m_pLogic
->GetThreadID(), uMsg, wParam, lParam );
                }

                
else
                
{
                    
return DefWindowProc( hWnd, uMsg, wParam, lParam );
                }

            }

            
break;
        }

        在邏輯線程中這般如此:
MSG msg;
        
while ( m_bRunning )
        
{
            
if ( PeekMessage( &msg, NULL, 00, PM_NOREMOVE ) )
            
{
                
if ( ! GetMessageW( &msg, NULL, 00 ) )
                
{
                    
return (int) msg.wParam;
                }


                MessageProc( msg.message, msg.wParam, msg.lParam );
            }


            LogicTick();
        }
        完成!
posted on 2009-01-10 23:37 flagship 閱讀(2866) 評論(1)  編輯 收藏 引用 所屬分類: FlagshipEngine

Feedback

# re: 3D引擎多線程:框架 2009-01-11 23:56 Corner Zhang
很有參考價值!贊一個  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品孕妇| 激情久久综合| 欧美综合国产| 久久精品视频免费播放| 久久久久久网| 欧美1区3d| 欧美日韩一区二区免费在线观看| 欧美网站在线观看| 国产伦精品一区| 在线不卡欧美| 在线一区二区三区四区| 欧美亚洲免费在线| 你懂的国产精品| 99香蕉国产精品偷在线观看| 亚洲综合日韩在线| 久久久久一区二区三区四区| 欧美精选在线| 国产综合欧美| 亚洲视频在线播放| 免费日韩成人| 亚洲一区二区三区成人在线视频精品| 欧美在线视频免费观看| 欧美精品激情在线| 国语精品一区| 亚洲少妇自拍| 男女激情久久| 亚洲小视频在线| 欧美国产三级| 国产欧美日韩视频一区二区三区| 亚洲久久一区二区| 久久久www成人免费毛片麻豆| 亚洲国产日韩欧美在线99 | 国产精品入口尤物| 国产主播精品在线| 亚洲精品永久免费| 欧美精品乱码久久久久久按摩| 国产视频亚洲精品| 一区二区三区鲁丝不卡| 久久伊人一区二区| 亚洲视频精选在线| 欧美成人国产一区二区 | 亚洲精品极品| 欧美亚洲综合另类| 99re6热只有精品免费观看| 蜜桃久久av| 亚洲电影一级黄| 久久最新视频| 久久精品一区| 狠狠噜噜久久| 久久嫩草精品久久久精品| 性欧美激情精品| 国产精品亚洲产品| 性伦欧美刺激片在线观看| 中文欧美日韩| 欧美性猛交xxxx乱大交退制版| 99国内精品久久| 亚洲精品影院| 欧美性片在线观看| 亚洲男人影院| 先锋影音网一区二区| 国产午夜精品理论片a级大结局 | 亚洲第一页中文字幕| 可以免费看不卡的av网站| 精品不卡一区| 免费在线日韩av| 麻豆精品精华液| 亚洲经典视频在线观看| 亚洲国产精品精华液网站| 欧美激情精品久久久久久免费印度| 亚洲三级免费| 亚洲视频网站在线观看| 国产亚洲精品久久久久动| 麻豆九一精品爱看视频在线观看免费| 久久久www成人免费无遮挡大片| 精品不卡视频| 91久久在线视频| 国产精品乱码妇女bbbb| 久久久国产精品一区二区中文| 久久精品一区二区三区四区| 亚洲高清毛片| 亚洲视频axxx| 伊人成年综合电影网| 最新日韩中文字幕| 国产精品蜜臀在线观看| 麻豆精品视频| 欧美手机在线| 免费在线成人| 亚洲三级免费| 亚洲综合色自拍一区| 伊人久久久大香线蕉综合直播 | 欧美日韩在线不卡一区| 午夜视频在线观看一区| 麻豆成人综合网| 亚洲欧美综合国产精品一区| 久久精品一二三区| 亚洲午夜一级| 老司机精品视频一区二区三区| 亚洲一区二区av电影| 久久三级视频| 欧美在线日韩| 欧美日产在线观看| 久久综合中文字幕| 国产精品爱啪在线线免费观看| 另类综合日韩欧美亚洲| 国产精品毛片大码女人 | 久久五月激情| 亚洲一区二区三区欧美| 美女精品国产| 久久国产欧美日韩精品| 欧美巨乳在线| 免费在线看一区| 国产午夜精品理论片a级探花| 亚洲精品一区二区三区福利| 在线欧美福利| 欧美一区二区播放| 亚洲女性裸体视频| 欧美日韩精品免费观看视一区二区| 久久天堂精品| 国产午夜精品理论片a级探花| 日韩视频在线观看| 日韩一区二区精品| 欧美成人伊人久久综合网| 猛男gaygay欧美视频| 黄色成人在线网站| 久久精品综合网| 久久亚洲综合色一区二区三区| 国产欧美亚洲视频| 亚洲综合国产精品| 久久国产加勒比精品无码| 国产精品婷婷| 亚洲欧美视频在线观看| 久久精品官网| 国产在线欧美| 久久久久青草大香线综合精品| 久久手机精品视频| 亚洲成人在线观看视频| 女人色偷偷aa久久天堂| 亚洲国产精品va在线观看黑人| 亚洲人成在线播放| 欧美激情一区二区三区在线视频| 91久久精品一区| 一区二区三区四区五区精品| 欧美午夜在线一二页| 亚洲女性喷水在线观看一区| 久久国产精品99精品国产| 国产一区二区精品久久91| 久久精品日产第一区二区三区| 欧美第十八页| 亚洲天堂偷拍| 韩国v欧美v日本v亚洲v| 麻豆av福利av久久av| 亚洲成人资源| 亚洲自拍啪啪| 久久久噜噜噜久久久| 亚洲第一在线| 欧美日本一区| 亚洲欧美久久久| 久久这里有精品视频| 亚洲国产精品成人久久综合一区| 欧美黑人一区二区三区| 亚洲视频在线观看一区| 美女图片一区二区| 亚洲香蕉成视频在线观看 | 国产日韩一区在线| 老司机凹凸av亚洲导航| av成人免费观看| 久久精品亚洲国产奇米99| 精品不卡在线| 欧美三日本三级少妇三2023| 欧美影院久久久| 亚洲精品免费一二三区| 久久精品人人爽| 亚洲三级影院| 国产日产亚洲精品| 久久亚洲不卡| 亚洲一区二区三区国产| 欧美国产日韩亚洲一区| 午夜激情久久久| 亚洲精品视频一区二区三区| 国产亚洲毛片| 国产精品久久久久国产精品日日| 久久香蕉国产线看观看av| 亚洲综合国产激情另类一区| 最新日韩在线| 欧美福利一区| 久久久99精品免费观看不卡| 亚洲视频999| 亚洲九九精品| 亚洲国产成人av在线| 国内外成人免费视频| 欧美婷婷六月丁香综合色| 六月婷婷久久| 欧美在线视频一区二区| 亚洲性图久久| 日韩视频在线观看免费| 亚洲国产老妈| 欧美国产成人精品| 美女网站久久| 玖玖玖国产精品| 久久久久www|