#include <process.h>
#include <iostream>
#include <windows.h>
using namespace std;
int ThreadFunc1(void* param)
{
int i=*(int*)param;
while(--i)
{
cout<<i<<endl;
Sleep(2000);
}
return 0;
}
void ThreadFunc2(PVOID param)
{
while(1)
{
int j=0;
for(int i=0; i<1000; i++)
{
j++;
}
}
}
int main()
{
HANDLE h[2];
int t1 = 15;
int *pstr1 = &t1;
h[0] = (HANDLE)_beginthreadex(0, 0, (unsigned int (__stdcall *)(void *))ThreadFunc1, pstr1, 0, 0);
int t2 = 10;
int *pstr2 = &t2;
h[1] = (HANDLE)_beginthreadex(0, 0, (unsigned int (__stdcall *)(void *))ThreadFunc1, pstr2, 0, 0);
// 如果有错误线程句柄,会返回WAIT_FAILED错误,如果里面已经有线程结束,会立即结束
int rval = WaitForMultipleObjects(2, h, false, INFINITE);
cout<<"-"<<rval<<endl;
if(rval==0)
h[0] = h[1];
// 重新调用此函数时,需要把已经结束的线程句柄去除
rval = WaitForMultipleObjects(1, h, false, INFINITE);
cout<<"-"<<rval<<endl;
cout<<h[0]<<"\n"<<h[1]<<endl;
cout<<ThreadFunc1<<endl;
CloseHandle(h[0]);
CloseHandle(h[1]);
while(true)
{
Sleep(1000);
}
return 0;
}
线程函数,一般不能为类的普通成员函数,可以是静态成员函数。