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;
    }
  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/yuan951/p/4780485.html
Copyright © 2011-2022 走看看