创建一个新线程

问题描述:创建线程有哪几种方式 这篇文章主要介绍了创建一个新线程时新线程和父线程都执行原来的代码吗,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

如何在VC中利用系统函数创建一个新的线程

创建一个新线程的相关图片

一、继承Thread类创建

通过继承Thread并且重写其run(),run方法中即线程执行任务。创建后的子类通过调用 start() 方法即可执行线程方法。

通过继承Thread实现的线程类,多个线程间无法共享线程类的实例变量。(需要创建不同Thread对象,自然不共享)

二、 通过Runnable接口创建线程类。

该方法需要先 定义一个类实现Runnable接口,并重写该接口的 run() 方法,此run方法是线程执行体。接着创建 Runnable实现类的对象,作为创建Thread对象的参数target,此Thread对象才是真正的线程对象。通过实现Runnable接口的线程类,是互相共享资源的。

三、 使用Callable和Future创建线程。

从继承Thread类和实现Runnable接口可以看出,上述两种方法都不能有返回值,且不能声明抛出异常。而Callable接口则实现了此两点,Callable接口如同Runable接口的升级版,其提供的call()方法将作为线程的执行体,同时允许有返回值。

但是Callable对象不能直接作为Thread对象的target,因为Callable接口是 Java 5 新增的接口,不是Runnable接口的子接口。对于这个问题的解决方案,就引入 Future接口,此接口可以接受call() 的返回值,RunnableFuture接口是Future接口和Runnable接口的子接口,可以作为Thread对象的target 。并且, Future 接口提供了一个实现类:FutureTask 。

FutureTask实现了RunnableFuture接口,可以作为 Thread对象的target。

c语言中如何创建新的线程的相关图片

c语言中如何创建新的线程

CreateThread函数可以用来创建一个线程,在MSDN中查找这个函数得到如下信息:"The CreateThread function creates a thread to execute within the address space of the calling process."和"If the function succeeds, the return value is a handle to the new thread."所以我们得定义一个句柄用来存放它的返回值。还定义一个指向线程ID的DWORD值dwThreadId。然后我们就可以用CreateThread函数来创建我们的线程了,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。

其中第一个参数我们设置为NULL,使这个句柄不能被继承;第二个参数设置为0,使用默认的堆栈大小;第三个参数为线程函数的起始地址,也就是线程函数的函数名;第四个参数为NULL,没有值要传递给线程函数;第五个参数为0,创建好之后马上让线程运行;第六个参数设置为指向线程ID的地址。创建好线程之后,线程函数进行初始化之类的操作,主函数继续执行,此时可以输出被创建线程的ID。我们在主函数中用WaitForSingleObject函数来等待线程函数变成受信(signaled)状态,它的两个参数分别是。

HANDLE hHandle, // handle to object to wait for。

DWORD dwMilliseconds // time-out interval in milliseconds。

第一参数为线程函数的句柄,第二个参数设置为INFINITE,等待线程一直执行完。在程序的最后还要记得用CloseHandle函数关闭线程,这样主函数就写完了。

在线程函数里面我们可以简单地做一些工作,比如设置一个循环,让它输出一定的信息等。源程序如下:

#include <windows.h>。

#include <iostream.h>。

DWORD WINAPI ThreadFunc(HANDLE Thread)。

int i;

for(i=0;i<10;i++)。

cout<<"A new thread has created!"<<endl;。

return 0;

int main(int argc,char* argv[])。

HANDLE Thread;

DWORD dwThreadId;。

Thread=::CreateThread。

(NULL,0,ThreadFunc,NULL,0,&dwThreadId);。

cout<<"The new thread ID is :"<<dwThreadId<<endl;。

::WaitForSingleObject(Thread,INFINITE);。

::CloseHandle(Thread);。

return 0;

在Window xp sp2&VC++ 6.0环境下编译通过。

如何创建线程的相关图片

如何创建线程

进程的生命周期:[1].创建 --- fork [2].执行 --- a. execb.子进程实现代码逻辑[3].结束 --- exit _exit僵尸态进程---wait waitpid孤儿进程--------------------------------------进程存在的问题:(1).进程的创建 --- 复制(时间 和 空间的开销很大)(2).进程的运行 --- 调度-->。

pthread_create创建一个线程,thread是用来表明创建线程的ID,attr指出线程创建时候的属性,我们用NULL来表明使用缺省属性。start_routine函数指针是线程创建成功后开始执行的函数,arg是这个函数的唯一一个参数。表明传递给start_routine的参数。

pthread_exit函数和exit函数类似用来退出线程.这个函数结束线程,释放函数的资源,并在最后阻塞,直到其他线程使用pthread_join函数等待它。然后将*retval的值传递给**thread_return.由于这个函数释放所以的函数资源,所以retval不能够指向函数的局部变量。

pthread_join和wait调用一样用来等待指定的线程。下面我们使用一个实例来解释一下使用方法.在实践中,我们经常要备份一些文件。下面这个程序可以实现当前目录下的所有文件备份。

Java开发如何创建一个线程?的相关图片

Java开发如何创建一个线程?

方式1:继承Thread类 步骤: 1):定义一个类A继承于Java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在run方法中编写需要执行的操作:run方法里的代码,线程执行体. 4):在main方法(线程)中,创建线程对象,并启动线程. (1)创建线程类。

windows系统中创建线程常用哪几个函数,有什

(1)通过扩展Thread类来创建多线程。

public static void main(String [] args){。

        MutliThread m1=new MutliThread("Window 1");。

        MutliThread m2=new MutliThread("Window 2");。

        MutliThread m3=new MutliThread("Window 3");。

        m1.start();。

        m2.start();。

        m3.start();。

    }

class MutliThread extends Thread{。

    private int ticket=100;//每个线程都拥有100张票。

    MutliThread(String name){。

        super(name);//调用父类带参数的构造方法。

    }

    public void run(){。

        while(ticket>0){。

            System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());。

        }

    }

(2)通过实现Runnable接口来创建多线程。

 public static void main(String [] args){。

        MutliThread m1=new MutliThread("Window 1");。

        MutliThread m2=new MutliThread("Window 2");。

        MutliThread m3=new MutliThread("Window 3");。

        Thread t1=new Thread(m1);。

        Thread t2=new Thread(m2);。

        Thread t3=new Thread(m3);。

        t1.start();。

        t2.start();。

        t3.start();。

    }

class MutliThread implements Runnable{。

    private int ticket=100;//每个线程都拥有100张票。

    private String name;。

    MutliThread(String name){。

        this.name=name;。

    }

    public void run(){。

        while(ticket>0){。

            System.out.println(ticket--+" is saled by "+name);。

        }

    }

原文地址:http://www.qianchusai.com/%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%96%B0%E7%BA%BF%E7%A8%8B.html

D3028时刻表,d3201时刻表查询

D3028时刻表,d3201时刻表查询

easyuefi备份引导,easyuefi怎么设置启动项

easyuefi备份引导,easyuefi怎么设置启动项

sailing-30

sailing-30

witness-160

witness-160

红米k30pro破解90hz,红米k30pro破解高刷新率

红米k30pro破解90hz,红米k30pro破解高刷新率

subnet-250

subnet-250

harpooneer

harpooneer

melanin-100

melanin-100

4531-180

4531-180

1650ti显卡吃鸡有压力吗,1650ti吃鸡能开什么画质

1650ti显卡吃鸡有压力吗,1650ti吃鸡能开什么画质

三国志战略版自愈战法搭配指南 - 最强治疗战法推荐 三国志战略版潼关之战白皮书 - 完整攻略指南 三国志战略版治疗率计算器 - 精准计算武将治疗能力 三国志战略版势力值计算方法详解 - 势力值提升攻略 三国志战略版怎么增加名声 - 完整攻略指南 三国志战略版 - 一统天下 | 策略战争手游官网 三国志战略版打地势力值计算器 - 最全势力值攻略指南 三国志战略版许褚可以拆吗?许褚拆解攻略指南 三国志战略版夏日灼烧 - 燃情夏日,征战三国 三国志战略版潼关异族兵种详解 - 游戏攻略大全 三国志战略版 将行其疾 - 技能攻略与搭配指南 三国志战略版势力增长攻略 - 快速提升势力值技巧大全 三国志战略版满级名声攻略 - 最全名声提升指南 三国志14战法搭配攻略 - 最强战法组合推荐 三国志战略版S3阵容搭配大全 - 最强阵容推荐与攻略 虎帐三国志战略版 - 重现三国风云,成就霸业宏图 三国志14战斗系统详解 - 完整攻略指南 三国志战略版火烧连营陆逊攻略 - 最强火系武将解析 三国志战略版虎帐可以建几个 - 虎帐建造数量详解 三国志战略版乐府有必要吗?深度解析乐府价值与投资建议 三国志战略版怎么快速升势力值 - 完整攻略指南 三国志战略版小型军屯攻略指南 - 资源获取与建设策略 三国志战略版最多多少名声 - 名声系统完全攻略 三国志战略版兵锋战法搭配攻略 - 最佳阵容与使用技巧 三国志战略版鬼神霆威攻略 - 技能解析与阵容搭配 三国志战略版策书怎么获得 - 策书获取方法大全 三国志战略版测试服下载 - 最新测试资格申请入口 三国志战略版天下骑T0阵容攻略 - 完整搭配指南 三国志战略版闪避和虚弱详解 - 游戏攻略指南 三国志战略版名声上限详解 - 完整攻略指南