读书人

过程的阻塞和挂起

发布时间: 2012-11-06 14:07:00 作者: rapoo

进程的阻塞和挂起

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

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]);}


读书人网 >编程

热点推荐