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;
}

 

posted @ 2015-09-03 18:27  构建巨人肩膀  阅读(209)  评论(0编辑  收藏  举报