• <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>

            kenlistian

            厚積薄發(fā). 勤為槳,思為帆

               :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理 ::
              73 隨筆 :: 4 文章 :: 22 評(píng)論 :: 0 Trackbacks

            這是我做的測(cè)試?yán)樱紤]到一個(gè)線程用于去讀數(shù)據(jù)庫(kù),一次性插入多條數(shù)據(jù)到共享數(shù)據(jù)區(qū),另外搞2個(gè)上的線程去讀這個(gè)共享數(shù)據(jù)區(qū),以后打算搞個(gè)線程池來(lái)處理讀部分。

            目下的問(wèn)題是我想把這個(gè)共享數(shù)據(jù)區(qū)做成可變化的動(dòng)態(tài)區(qū),當(dāng)讀入數(shù)據(jù)大時(shí),一次讀入全部讀完。當(dāng)數(shù)據(jù)量小時(shí),則在規(guī)范范圍的空間中運(yùn)行。

            采用vector<mystructData>方式動(dòng)態(tài)變化,比如要?jiǎng)h除超過(guò)長(zhǎng)度之外的設(shè)置,只需要earse就可以了,在線程中每次通過(guò)begin,end自動(dòng)掃描處理中數(shù)據(jù)部分。

            如果把線程部分放到dll中,那么考慮到如何讀取共享數(shù)據(jù)區(qū),采用導(dǎo)出函數(shù)方式,把主線程中的一個(gè)函數(shù)地址傳入到dll中,然后在這個(gè)函數(shù)中通過(guò)

            find_if(a.begin(),a.end(),myfunc)照樣可以處理dll中跑線程的問(wèn)題,之所以考慮用dll分離各個(gè)線程部分,是考慮到業(yè)務(wù)不同時(shí),每個(gè)dll處理掃描共享數(shù)據(jù)區(qū),發(fā)現(xiàn)自己的業(yè)務(wù)就去處理,不是則不理會(huì),這樣考慮設(shè)計(jì)可以通過(guò)編寫(xiě)dll方式來(lái)擴(kuò)展不同的業(yè)務(wù)。


            #include "stdafx.h"
            #include <vector>
            #include <iostream>
            #include <windows.h>
            #include <process.h>
            #include <algorithm>

            using namespace std;

            struct te
            {
             int IsGet;
             int a1;
             int s1;
             char b1[20];
            };

            bool isget(te t)
            {
             return t.IsGet ==1;
            }
            bool getdata(te t)
            {
             return t.IsGet==0;
            }
            vector<te> a; 
            HANDLE hMutex;

            void myprint(te t)

             cout<<"   ALL "<< (t.IsGet == 0? "Have": "No ")<< "("<<t.a1<<")"<<t.s1<<" " << t.b1 <<endl;
              
            }

            DWORD WINAPI insertdata( LPVOID lpParam )

             vector<te>::iterator p; 
             int i = 0;
             while (1)
             {  

              do{
               
                p = find_if(a.begin(), a.end(), isget);  
                if (p!= a.end())
                {      
               WaitForSingleObject(hMutex, INFINITE);
               i++;
               p->IsGet = 0; 
               p->s1 = i;
               sprintf(p->b1, "%s- %d", "thread_insert" , i); 
                  cout<<" insert("<<p->a1<<") " << p->s1<<"  " << p->b1 <<endl;  
                  ReleaseMutex(hMutex);
                }
                //Sleep(1000);
               
              }
              while(p != a.end());
              
              WaitForSingleObject(hMutex, INFINITE);
              cout<<"---------------------------"<<endl;
              for_each(a.begin(), a.end(), myprint);
              ReleaseMutex(hMutex);  
              Sleep(11000);
             }


             return 0;
            }

            //讀線程,讀完對(duì)IsGet標(biāo)志為1
            DWORD WINAPI processdata( LPVOID lpParam )
            {
             vector<te>::iterator p;
             
             while(1)
             {
              WaitForSingleObject(hMutex, INFINITE);
              p = find_if(a.begin(), a.end(), getdata);
              if (p != a.end())
              {   
                cout<<"("<< (char*)lpParam << ") get (" << p->a1<<") " << p->s1 <<" " << p->b1 <<endl;   
                p->IsGet = 1;   
                p->s1 = 0;
                p->b1[0] = '\0';
              
              }  
              ReleaseMutex(hMutex);
              Sleep(500);
             }

             return 0;
            }

            int main(int argc, char* argv[])
            {
             
             HANDLE hInsertHandle, hProcessHandle1,hProcessHandle2;
             DWORD dwThreadId;

             te tt1;
             for(int i = 0; i < 10;i++)
             {
              tt1.IsGet = 1;             //可以寫(xiě)入標(biāo)志
              tt1.a1 = i;
              tt1.s1 = 0;
              sprintf(tt1.b1,"%d", i);
              a.push_back(tt1);
             }

             hMutex = CreateMutex(NULL, false, "mutex");

              hInsertHandle = CreateThread(
                    NULL,                 
                    0,                    
              insertdata,        
                    NULL,                   // argument to thread function
                    0,                           // use default creation flags
                    &dwThreadId);
             
              hProcessHandle1 = CreateThread(  //讀出線程1
                    NULL,                 
                    0,                    
              processdata,        
                    "proc1" ,              
                    0,                     
                    &dwThreadId);
                hProcessHandle2 = CreateThread(
                    NULL,                 
                    0,                    
              processdata,        
                    "proc2",            
                    0,                  
                    &dwThreadId);

             
             while(1)
             { 
              printf("main thread ...\n");
              char c = getchar();
              if (c== 'q')
               break;
             }

             return 0;
            }

            posted on 2006-05-28 15:27 kenlistian 閱讀(3262) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            日韩精品久久久久久免费| 无码AV波多野结衣久久| 国产精品美女久久久久av爽| 性做久久久久久久久久久| 亚洲精品乱码久久久久久久久久久久 | 精品久久久久久无码人妻热| 久久久久亚洲AV综合波多野结衣| 一日本道伊人久久综合影| 国产精品久久国产精麻豆99网站| 欧美久久一级内射wwwwww.| 东方aⅴ免费观看久久av| Xx性欧美肥妇精品久久久久久| 少妇人妻综合久久中文字幕| 久久最新精品国产| 久久久久久久女国产乱让韩| 99久久99久久精品国产片| 人妻精品久久无码区| 亚洲国产成人精品女人久久久| 久久91精品久久91综合| 亚洲精品乱码久久久久久蜜桃图片| 久久久精品视频免费观看| 久久99国产精品久久99果冻传媒| 久久亚洲日韩看片无码| 少妇久久久久久被弄到高潮| 日本三级久久网| 精品999久久久久久中文字幕| 伊人久久综合精品无码AV专区| 亚洲欧美日韩精品久久亚洲区| 久久精品国产精品亚洲艾草网美妙 | 久久精品这里只有精99品| 久久这里只有精品久久| 一本一道久久精品综合| 国产精品久久亚洲不卡动漫| 91精品国产综合久久久久久| 久久亚洲中文字幕精品有坂深雪| 久久亚洲精品人成综合网| 中文字幕日本人妻久久久免费| 久久久久噜噜噜亚洲熟女综合| 婷婷久久精品国产| 久久精品国产乱子伦| 午夜精品久久久久久中宇|