c++里的线程相关创建

来源:互联网 发布:ukcn中介怎么样 知乎 编辑:程序博客网 时间:2024/06/16 11:51
#include <iostream>
#include <windows.h>


using namespace std;


DWORD WINAPI ThreadFunc(LPVOID lpParameter)                              //C++里面线程的创建,前面为返回值类型     LPVOID为输入类型
{
int i = (int)lpParameter;
while(i--)
{
cout << "打印倒数第" << i << "次." << endl;
if(i == 89)
{
ExitThread();                                                //退出线程
}
}

return 1;
}


int main()
{
DWORD threadfd;
HANDLE thread;

thread = CreateThread(NULL, 0, ThreadFunc,(LPVOID)5, 0, &threadfd);      //第二空位分配堆栈,0则1MB   第三个既是线程运行的函数  (LPVOID)强制类型转换,不写会报错
if (thread == false)                                                     //第四个量CREATE_SUSPENDED,则是创建及挂起,等待ResumeThread  第五个是新线程的ID
{
cout << "线程创建失败." << endl;
}


ResumeThread(thread);                                                        //取消挂起
Sleep(5000);
SuspendThread(thread);                                                       //挂起,与上面的CREATE_SUSPENDED等效果
Sleep(5000);
ResumeThread(thread);
Sleep(5000);
SuspendThread(thread);
Sleep(5000);
ResumeThread(thread);







do{
GetExitCodeThread(thread, &threadfd2);                              //检测线程是否结束,根据返回值判断
} while (threadfd2 == STILL_ACTIVE);
//sleep(20);


DWORD ret;
ret = WaitForSingleObject(thread, INFINITE);                           //等待线程,在规定时间内     此处INFINITE为无线等待
if (ret == WAIT_FAILED)
{
cout << "等待失败." << endl;
}
else if (ret == WAIT_OBJECT_0)
{
cout << "等待成功." << endl;
}
else if (ret == WAIT_TIMEOUT)
{
cout << "等待超时." << endl;
}


return 0;
}
原创粉丝点击