zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    COCI2013-2014 Contest#3 F 单调栈
    Topcoder SRM568 Div1 DisjointSemicircles (二分图染色)
    COCI2013-2014 Contest#1 F SLASTIČAR
    TopCoder SRM 561 Orienteering(树形dp)
    COCI20122013 Contest#5 F
    2016 多校5 ATM
    2014多校6 Another Letter Tree
    HAOI2015 数组游戏
    [CCO 2017]接雨滴
    Luogu P6789 寒妖王
  • 原文地址:https://www.cnblogs.com/yuan951/p/4780485.html
Copyright © 2011-2022 走看看