test

HANDLE hMutex;


DWORD ThreadID;
DWORD ThreadID_S;

class task_info
{
 char* task_id;
public:
 char* get_task_id()
 {
  return task_id;
 }
 void set_task_id(char* id)
 {
  task_id = id;
 }
};
class task_pool
{
public:
 int list_state;
 list<task_info> *task_list;
};
list<task_pool> task_pool_list;

task_pool get_buzy_pool()
{
 for ( list<task_pool>::iterator it = task_pool_list.begin () ; it != task_pool_list.end (); it ++ )
 {
  if((*it).list_state==1)
  { 
   return (*it);
   break;
  }
 }
}

task_pool get_free_pool()
{
 bool flag = false;
 for ( list<task_pool>::iterator it = task_pool_list.begin () ; it != task_pool_list.end (); it ++ )
 {
  if((*it).list_state==0)
  {
   return (*it);
   flag = true;
   break;
  }
 }

 if(!flag)
 {
  task_pool *tp = new task_pool;
  tp->list_state = 0;
  tp->task_list = new list<task_info>;

  task_pool_list.push_back(*tp);

  return *tp;
 }
}
#define MY_MSG WM_USER+100

DWORD WINAPI Thread_List_In(LPVOID lpParam)
{
 while(1)
 {
  MSG msg;
  PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
  if(GetMessage(&msg,0,0,0)) //get msg from message queue
        {
            switch(msg.message)
            {
            case MY_MSG:
                char * pInfo = (char *)msg.wParam;
                printf("recv %s\n",pInfo);
                delete[] pInfo;
                break;
            }
        }

  WaitForSingleObject(hMutex,INFINITE);
  task_pool tp = get_free_pool();
  for(int i=0;i<300;i++)
  {
   task_info *ti = new task_info();
   ti->set_task_id("1");

   tp.task_list->push_back(*ti);
  }
  tp.list_state = 1;
  ReleaseMutex(hMutex);

  Sleep(100);
 }

 //WaitForSingleObject(hMutex,INFINITE);

 while(true)
 //{
 // for(int i=0;i<30000;i++)
 // {
 //  task_info *ti = new task_info();
 //  ti->set_task_id("1");

 //  task_list->push_back(*ti);
 // }
 // if(task_list->size()>8000)
 // {
 //  Sleep(1000);
 // }
 //}

 //ReleaseMutex(hMutex);

 return 0;
}

DWORD WINAPI Thread_List_Out(LPVOID lpParam)
{
 for(int i=0;i<10;i++)
 {
  WaitForSingleObject(hMutex,INFINITE);
  task_pool tp  = get_buzy_pool();
  
  cout<<"size--------- :"<<tp.task_list->size()<<endl;
  char* pInfo = new char[10]; //create dynamic msg
  sprintf(pInfo,"msg_%d",i);
        if(!PostThreadMessage(ThreadID,MY_MSG,(WPARAM)pInfo,0))//post thread msg
        {
            printf("post message failed,errno:%d\n",::GetLastError());
            delete[] pInfo;
        }

  //task_pool_list.remove(tp);
  //tp.list_state = 0;
  //tp.task_list->clear();
  ReleaseMutex(hMutex);

  Sleep(1000);
 }
 /*WaitForSingleObject(hMutex,INFINITE);

 while(true)
 {
  cout<<"size--------- :"<<task_list->size()<<endl;
  task_list->clear();
  Sleep(1000);
 }
 
 ReleaseMutex(hMutex);*/

 return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
 hMutex=CreateMutex(NULL,false,NULL);

    HANDLE h_thread = CreateThread(
                    NULL,       // default security attributes
                    0,          // default stack size
                    (LPTHREAD_START_ROUTINE) Thread_List_In,
                    NULL,        // no thread function arguments
                    0,          // default creation flags
                    &ThreadID); // receive thread identifier

    if( h_thread == NULL )
    {
        printf("CreateThread error: %d\n", GetLastError());
        return 1;
    }

 DWORD ThreadID_S;
    HANDLE h_thread_S = CreateThread(
                    NULL,       // default security attributes
                    0,          // default stack size
                    (LPTHREAD_START_ROUTINE) Thread_List_Out,
                    NULL,        // no thread function arguments
                    0,          // default creation flags
                    &ThreadID_S); // receive thread identifier

    if( h_thread_S == NULL )
    {
        printf("CreateThread error: %d\n", GetLastError());
        return 1;
    }
 
 //SetPriorityClass(h_thread,1);
 //SetPriorityClass(h_thread_S,2);
 


 Sleep(5000);

 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值