CPlus的简单线程的制作
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; }