您的位置:首页 > 其它

CPlus的简单线程的制作

2015-09-03 18:27 330 查看
1、线程需要用到<widnows.h>

2、利用句柄创建并执行线程:

HANDLE hThread = CreateThread(NULL, 0, Fun, &tp, 0, NULL);
CloseHandle(hThread);

注意:线程的函数必须是以DWORD WINAPI functionName(LPVOID lpParamter)的形式声明

3、完整代码如下:

#include <iostream>
#include <windows.h>
using namespace std;
int i=0;
struct threadParams
{
char* name;
int age;
};
DWORD WINAPI Fun(LPVOID lpParamter)
{
threadParams *sp = (threadParams*)lpParamter;

cout<<"Have been started: "<<i++<<" secend(s)!\n";
cout<<"name = "<<sp->name<<endl;
cout<<"age = "<<sp->age<<endl;

return 0;
}
/*
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,      // pointer to security attributes
DWORD dwStackSize,                  // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress,       // pointer to thread function
LPVOID lpParameter,                   // argument for new thread
DWORD dwCreationFlags,                // creation flags
LPDWORD lpThreadId                  // pointer to receive thread ID
);

第一个参数是指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL。
第二个参数是用于新线程的初始堆栈大小,默认值为0。在任何情况下,Windows根据需要动态延长堆栈的大小。
第三个参数是指向线程函数的指标。函数名称没有限制,但是必须以下列形式声明:
DWORD WINAPI ThreadProc (PVOID pParam) ;
第四个参数为传递给ThreadProc的参数。这样主线程和从属线程就可以共享数据。
第五个参数通常为0,但当建立的线程不马上执行时为旗标CREATE_SUSPENDED。线程将暂停直到呼叫ResumeThread来恢复线程的执行为止。
第六个参数是一个指标,指向接受执行绪ID值的变量。

*/
DWORD WINAPI inputAPI(LPVOID lp){
char* s=NULL;
cin>>s;
if(s=="s"){
exit(0);
}
}
int main()
{
threadParams tp;
tp.name = "tom";
tp.age = 20;
char* s  = NULL;

while(TRUE)
{
if(i==20)
{
cout<<"You have successed!Congratunations!"<<endl;
break;
}
HANDLE hThread = CreateThread(NULL, 0, Fun, &tp, 0, NULL);
CloseHandle(hThread);
if(i==18)
{
cout<<"Closing the thread!"<<endl;
TerminateThread(hThread,0);//close a thread
system("pause");

}
HANDLE INThread = CreateThread(NULL,0,inputAPI,NULL,0,NULL);
CloseHandle(INThread);
Sleep(1000);
}
//Sleep(1);
//while(1) { cout<<"main display!\n";  Sleep(2000);}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: