首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

过程的阻塞和挂起

2012-11-06 
进程的阻塞和挂起在线程管理中,线程的阻塞和挂起其实都是等待。即触发一个事件或等待一时间在执行。当然这两

进程的阻塞和挂起

     在线程管理中,线程的阻塞和挂起其实都是等待。即触发一个事件或等待一时间在执行。当然这两者的实现模式不一样。在这里,显示一下我们上课的例子,了解线程的阻塞和挂起的的使用

   1.线程的阻塞

    

/*  阻塞线程*/#include<windows.h>#include<iostream>using namespace std;struct Point{int x,y,z;};DWORD WINAPI threadStartPoint(LPVOID data){Sleep(2000);Point* p = (Point*)data;cout<<"shuchu: "<<p->x<<"\t"<<p->y<<"\t"<<p->z<<endl;cout<<"thread job done"<<endl;return 0;}int main(){DWORD threadID;Point p;p.x = 2;p.y = 3;p.z = 4;HANDLE handle  = CreateThread(0,0,threadStartPoint,(LPVOID)&p,0,&threadID);//Sleep(2000);if(!handle){cout<<"failed"<<endl;}else{cout<<"start on threadid="<<threadID<<endl;}WaitForSingleObject(handle, 2000 );cout<<"main thread exiting..."<<endl;return 0;}

 2.线程的挂起


 

/*  挂起线程例子 */#include<windows.h>#include<iostream>using namespace std;DWORD WINAPI ThreadProc(LPVOID lpParam){LPDWORD pData;DWORD i = 0;pData = (LPDWORD)lpParam;for(i; i < 10; i++){Sleep(100);cout<<"TID = "<<GetCurrentThread()<<",Parameters = "<<*pData<<",i="<<i<<endl;}ExitThread(i);return 0;}int main(){DWORD dwData_1;DWORD dwData_2;DWORD dwThreadID[2];HANDLE hThread[2];dwData_1 = 1;dwData_2 = 2;//创建挂起线程hThread[0] = CreateThread(NULL,0,ThreadProc,&dwData_1,CREATE_SUSPENDED,&dwThreadID[0]);if(hThread[0] == NULL){ExitProcess(0);}//创建普通线程hThread[1] = CreateThread(NULL,0,ThreadProc,&dwData_2,0,&dwThreadID[1]);if(hThread[1] == NULL){ExitProcess(0);}//休眠 Sleep(200);//启动0ResumeThread(hThread[0]);//挂起1SuspendThread(hThread[1]);//正好500会造成少输入一次Sleep(550);//输出五次就停止TerminateThread(hThread[0],0);//启动1ResumeThread(hThread[1]);//WaitForMultipleObjects(2, hThread, TRUE, INFINITE);//关闭句柄CloseHandle(hThread[0]);CloseHandle(hThread[0]);}


 

热点排行