C++多线程二
SuspendThread()暂停一个线程,ResumeThread()重启一个线程。参数均为线程的句柄。
#include <iostream> #include <windows.h> using namespace std; DWORD WINAPI mythread(void *p) { for(int i=0;i<100;i++) { cout<<"hello,everybody!"<<endl; ::Sleep(100); } return 0; } int main() { HANDLE handle; DWORD dw; handle=::CreateThread(NULL,0,mythread,NULL,0,&dw); ::Sleep(100); for(int i=0;i<10;i++) { cout<<"---now,suspended!----"<<endl; ::SuspendThread(handle); //暂停 for(int j=0;j<3;j++) { cout<<"good,thank you!"<<endl; ::Sleep(100); } cout<<"----now,resumed!----"<<endl; ::ResumeThread(handle); //重启 ::Sleep(300); } ::CloseHandle(handle); return 0; }
TerminateThread()终止一个线程,两个参数(线程的句柄,线程的退出码)。此函数比较危险,被终止的线程函数立马停止执行,无法释放相关资源。
DWORD WINAPI mythread(void *lp) { for(int i=0;i<20;i++) { cout<<"hello"<<endl; ::Sleep(100); } return 0; } int main() { HANDLE handle; DWORD dw; handle=::CreateThread(NULL,0,mythread,NULL,0,&dw); if(handle==NULL) { cout<<"thread failed!"<<endl; return -1; } ::Sleep(1000); cout<<"thread terminated!"<<endl; ::TerminateThread(handle,2);//终止线程的执行 ::Sleep(1000); ::CloseHandle(handle); return 0; }
GetExitCodeThread()用来查询某个线程的退出码。如果线程还在运行,返回STILL_ACTIVE;如果已经结束,则返回由TerminateThread()或ExitThread()设置的退出码。
DWORD WINAPI mythread(void *p) { cout<<"mythread id is:"<<::GetCurrentThreadId()<<endl; return 8; } //分别输出线程ID和线程退出码 int main() { HANDLE handle; DWORD dw; handle=::CreateThread(NULL,0,mythread,NULL,0,&dw); ::Sleep(1000); ::GetExitCodeThread(handle,&dw); cout<<"thread exitCode is:"<<dw<<endl; return 0; }
ExitThread()退出线程,并释放相关的资源。参数为线程的退出码。
DWORD WINAPI mythread(void *p) { cout<<"mythread id is :"<<::GetCurrentThreadId()<<endl; cout<<"thread exit!"<<endl; ::ExitThread(5);//参数即为线程的退出码 cout<<"不能执行到这里"<<endl; return 5; } int main() { HANDLE handle; DWORD dw; handle=::CreateThread(NULL,0,mythread,NULL,0,&dw); ::Sleep(50); ::GetExitCodeThread(handle,&dw); cout<<"thread id is :"<<dw<<endl; ::CloseHandle(handle); return 0; }
BOOL WINAPI SetThreadPriority(HANDLE hThread,int nPriority)设置线程的优先级。
//(线程句柄,要设置的优先级)
Int WINAPI GetThreadPriority(HANDLE hThread);获得线程的优先级。
人生无处不代码,没有代码不人生。