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

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>
            国产精品成人一区二区网站软件 | 欧美日韩系列| 亚洲精品乱码久久久久久久久| 久久色在线观看| 久久久久久久久综合| 在线观看精品| 亚洲国产精品va| 欧美福利视频在线| 欧美日韩在线综合| 亚洲欧美在线免费| 欧美在线播放高清精品| 亚洲国产欧美不卡在线观看| 亚洲精品美女| 国产日韩精品一区二区三区在线| 久久综合久久综合久久综合| 欧美成人视屏| 欧美一区二区三区免费视| 久久青草福利网站| 亚洲天堂偷拍| 久久久久久久网站| 亚洲天堂激情| 久久香蕉国产线看观看网| 亚洲午夜精品国产| 久久高清福利视频| 一本色道久久综合狠狠躁的推荐| 亚洲欧美成人精品| 亚洲欧洲日夜超级视频| 国产精品99久久久久久www| 激情六月婷婷综合| 国产精品99久久久久久宅男 | 欧美高清成人| 久久精品视频在线| 欧美另类综合| 欧美bbbxxxxx| 国产日韩成人精品| 一区二区国产精品| 亚洲国产日韩在线一区模特| 亚洲综合精品四区| 在线一区二区三区做爰视频网站| 久久久www成人免费毛片麻豆| 亚洲视频国产视频| 欧美电影电视剧在线观看| 久久九九久精品国产免费直播| 欧美日韩伦理在线| 亚洲国产精品va在看黑人| 黄色成人91| 亚洲欧美一区二区原创| 中日韩在线视频| 欧美激情视频免费观看| 欧美成人国产va精品日本一级| 国产视频丨精品|在线观看| 99v久久综合狠狠综合久久| 91久久久在线| 免费在线观看成人av| 老**午夜毛片一区二区三区| 国产亚洲欧美一区在线观看| 亚洲欧美成人在线| 午夜欧美电影在线观看| 国产精品高精视频免费| 99热精品在线| 亚洲一区一卡| 欧美午夜精品久久久久久人妖 | 久久er精品视频| 国产精品亚洲综合天堂夜夜| 一区二区三区高清不卡| 亚洲一区二区不卡免费| 欧美日韩精品是欧美日韩精品| 亚洲国产精品成人| 日韩午夜剧场| 欧美日韩国产综合久久| 亚洲美女av电影| 亚洲综合色丁香婷婷六月图片| 欧美午夜精品久久久久久超碰| 亚洲视频电影在线| 国产精品成人一区二区三区吃奶| 一区二区激情视频| 欧美中文字幕在线| 国产在线一区二区三区四区| 久久久久免费观看| 亚洲成人资源| 亚洲一区二区免费视频| 国产美女精品人人做人人爽| 久久av资源网站| 欧美肥婆在线| 亚洲女爱视频在线| 狠狠色丁香婷婷综合影院| 久久一综合视频| 亚洲乱码国产乱码精品精 | 伊人久久久大香线蕉综合直播| 蜜臀av一级做a爰片久久| 亚洲国产一区二区a毛片| 亚洲一级片在线观看| 国产欧美一区二区视频| 毛片一区二区三区| 一区二区三区欧美亚洲| 蜜臀av性久久久久蜜臀aⅴ| 亚洲美洲欧洲综合国产一区| 国产精品系列在线| 欧美.www| 欧美一区二区三区在线播放| 亚洲第一网站| 久久成人精品无人区| 91久久亚洲| 国产农村妇女毛片精品久久莱园子| 久久久久久久欧美精品| 亚洲视频在线播放| 欧美黄免费看| 久久国产加勒比精品无码| 亚洲肉体裸体xxxx137| 国产人成一区二区三区影院| 欧美极品影院| 久久久精品日韩欧美| 在线视频一区观看| 亚洲国产精品第一区二区三区 | 中文日韩在线视频| 在线观看日韩欧美| 国产欧美日韩视频一区二区三区| 欧美福利影院| 久久青草久久| 久久av免费一区| 亚洲一区二区三区在线| 亚洲老板91色精品久久| 欧美成人激情在线| 久久夜色精品| 久久精品国产成人| 午夜天堂精品久久久久| 在线天堂一区av电影| 亚洲精品1区| 亚洲成色999久久网站| 国产亚洲欧美一区二区| 国产精品一区二区久激情瑜伽| 欧美女人交a| 欧美日韩精品二区| 欧美美女bbbb| 欧美日韩ab片| 欧美日韩妖精视频| 欧美日韩一区二区三区免费看| 男人天堂欧美日韩| 欧美.www| 欧美久久久久免费| 欧美理论电影在线观看| 欧美久久电影| 欧美日韩精品免费观看视一区二区 | 亚洲精品欧美极品| 激情综合在线| 亚洲高清电影| 在线观看日韩一区| 国内成+人亚洲+欧美+综合在线| 欧美激情一区二区| 在线观看国产一区二区| 美日韩在线观看| 久久精品免费观看| 国外成人在线视频网站| 正在播放亚洲| 亚洲影院色在线观看免费| 国产嫩草影院久久久久 | 亚洲精品极品| 一本一本久久a久久精品综合妖精| 国产精品v欧美精品v日韩精品 | 国产精品另类一区| 久久久综合网站| 亚洲国产一区二区a毛片| 久久综合狠狠综合久久综合88| 午夜精品久久久99热福利| 欧美精品综合| aa国产精品| 一区二区三区不卡视频在线观看 | 日韩一级精品视频在线观看| 影音欧美亚洲| 欧美成人免费视频| 久久一二三区| 日韩一本二本av| 国产精品免费在线| 亚洲欧美成人综合| 欧美国产视频在线| 亚洲在线免费| 一区在线影院| 欧美日韩国产在线播放网站| 久久久久久999| 欧美精品一级| 欧美成人免费在线视频| 一本久久综合亚洲鲁鲁五月天 | 久久精品国产欧美亚洲人人爽| 亚洲五月六月| 欧美视频日韩视频在线观看| 久久黄色影院| 欧美一区国产一区| 亚洲新中文字幕| 亚洲美女视频| 午夜伦欧美伦电影理论片| 亚洲香蕉网站| 亚洲欧美韩国| 亚洲国产成人精品久久| 快播亚洲色图| 亚洲国产成人久久| 亚洲国产99精品国自产| 久久在线91| 久久人人爽人人| 久久久精彩视频| 久久久综合精品|