• 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)!
    ";
        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!
    ";  Sleep(2000);}
        return 1;
    }
  • 相关阅读:
    2019第二周作业
    2019 编程总结
    寒假作业2编程总结
    2018秋季学习总结
    喜欢的老师
    人生路上对我影响最大的三位老师
    自我介绍
    抓老鼠啊~亏了还是赚了?
    币值转换
    打印沙漏
  • 原文地址:https://www.cnblogs.com/yuan951/p/4780485.html
Copyright © 2020-2023  润新知