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;
}
时间: 2024-11-18 15:13:53

CPlus的简单线程的制作的相关文章

Linux多线程实践(9) --简单线程池的设计与实现

线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收.所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁.如何利用已有对象来服务(不止一个不同的任务)就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因.比如大家所熟悉的数据库连接池正是遵循这一思想而产生的,本文将介绍的线程池技术同

C# 简单线程实例

1.简单线程实例 以及委托(同步委托.异步委托) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Runtime.Remoting.Messaging; namespace ThreadTest { class Program { static void Main(string[] args) { C

留念 C语言第一课简单的计算器制作

学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */ #include<stdio.h>  #include<stdlib.h> #include<conio.h>void displayMenu();void add();void sub();void multiply();void divide();void yushu();void jiecheng();void leijia();void jiechengleijia();int main(in

关于StartCoroutine的简单线程使用

StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况. 下面通过一个简单的例子来说明使用协程的好处: [csharp] view plaincopy void OnGUI() { GUI.Label(new Rect(0, 0, 200, 50), "测试1:

一个简单的ORM制作(SQL帮助类)

一个简单的ORM制作大概需要以下几个类: SQL执行类 CURD操作类 其他酱油类 先从SQL执行类说起,可能会涉及数据库的迁移等问题,所以需要定义一个接口以方便迁移到其他数据库, 事务没提供命名,若需要命名可修改为可变参数,IHelper代码如下: internal interface IHelper:IDisposable { int ExecuteQuery(string txt, IEnumerable<IDataParameter> ps, bool issp);//用于执行INSE

Linux下简单线程池的实现

线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收.所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁.如何利用已有对象来服务(不止一个不同的任务)就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因.比如大家所熟悉的数据库连接池正是遵循这一思想而产生的,本文将介绍的线程池技术同

简单几步制作 Windows 10 正式版U盘可启动安装盘图文教程 (全新安装Win10)

简单几步制作 Windows 10 正式版U盘可启动安装盘图文教程 (全新安装Win10) 相信不少朋友现在已经下载好 Windows 10 RTM 正式版的镜像文件了,虽然说微软提供了在原系统基础上升级的方式,但对于很多追求干净.稳定的朋友还是想要进行全新的安装的. 虽然将 Win10 系统的 ISO 镜像刻录成光盘来安装非常简单,但现在很多电脑已经不再配备光驱了,怎样制作 USB 的可启动 Windows 10 U盘安装盘成了很多同学的需求.今天吉他锅就给大家带来快速创建 Win10 启动安

LINUX下的简单线程池

前言 任何一种设计方式的引入都会带来额外的开支,是否使用,取决于能带来多大的好处和能带来多大的坏处,好处与坏处包括程序的性能.代码的可读性.代码的可维护性.程序的开发效率等. 线程池适用场合:任务比较多,需要拉起大量线程来处理:任务的处理时间相对比较短,按照线程的周期T1(创建阶段).T2(执行阶段).T3(销毁阶段)来算,执行阶段仅占用较少时间. 简单的线程池通常有以下功能:预创建一定数量的线程:管理线程任务,当工作线程没有事情可做时休眠自己:销毁线程池. 复杂一些的线程池有额外的调节功能:管

C++版简单线程池

需求 之前写过一个C#版本的简单线程池http://blog.csdn.net/ylbs110/article/details/51224979 由于刚刚学习了C++11新特性中的future,于是想到用它来实现一个线程池. 实现 思路基本和C#版本的一样,主要区别是委托的实现,线程句柄的不同和线程锁: 本来C++有function模板,但是实现起来比较麻烦,这里主要是实现线程池,所以动态参数的委托就不实现了,直接使用typedef void(*Func)();来实现一个无参数无返回值的函数指针