C++:创建线程初试

1.使用CreatThread创建

#include <iostream>
#include <Windows.h>
using namespace std;
/*
创建一个线程
*/
DWORD WINAPI fun(LPVOID ipParamter)
{
	while (true)
	{
		cout << "fun1 display!" << endl; Sleep(1000);
	}
}
/*
创建第二个线程
*/
DWORD WINAPI fun2(LPVOID i)
{
	while (true)
	{
		cout << "fun2 " << endl; Sleep(1500);
	}
}
int main()
{
	//第二个参数0是初始的字节,第五个参数0是便是立即开始线程
	HANDLE hThread = CreateThread(NULL, 0, fun, NULL, 0, NULL);
	HANDLE hThread2 = CreateThread(NULL, 0, fun2, NULL, 0, NULL);
	CloseHandle(hThread);
	CloseHandle(hThread2);

	while (true)
	{
		cout << "main display!" << endl; Sleep(2000);
	}

	return 0;
} 

  使用CreatThread创建线程是不安全的,容易造成内存泄漏(CRT相关)

所以推荐使用_beginThread或_beginThreadex,它内部也使用了CreatThread,但是在使用前做了很多工作以确保其安全性。

2.使用_beginThread创建

#include <iostream>
#include <Windows.h>
#include <process.h>
using namespace std;
void  fun1()
{
	while (true)
	{
		cout << "fun1 display\n"; Sleep(1000);
	}
}
unsigned _stdcall fun2(void * )
{
	while (true)
	{
		cout << "fun2 display\n"; Sleep(1000);
	}
}
int main()
{
	unsigned int thID1, thID2;
	HANDLE hfun1, hfun2;
	hfun1 = (HANDLE)_beginthread((void(*)(void*))fun1, 0, NULL);
	hfun2 = (HANDLE)_beginthreadex(NULL, 0, fun2, NULL, 0, &thID2);
	WaitForSingleObject(hfun1, INFINITE); //一定要等子线程完毕
	WaitForSingleObject(hfun2, INFINITE);
	CloseHandle(hfun1);
	CloseHandle(hfun2);

	cout << "end\n";
	return 0;
}

3.std::thread

C++11以来支持了thread类,方便了多线程的创建管理。

#include <mutex>
#include <iostream>
#include <thread>
#include <windows.h>
using namespace std;
mutex m;
void f()
{
	cout << "using..." << endl;
}
int a;
void fun1(int i)
{

	while (true)
	{
		m.lock();
		//a++; cout << "f1"<< endl; Sleep(1000);
		f();
		Sleep(5000);
		m.unlock();
	}
}
void fun2()
{

	while (true)
	{
		m.lock();
	//	a--; cout << "f2"<< endl; Sleep(1000);
		f();
		Sleep(1000);
		m.unlock();
	}
}
int main()
{
	a = 1;
	thread th(fun1, 1);
	thread ti(fun2);
	th.join();
	ti.join();

	return 0;
}

  

时间: 2024-10-13 06:59:43

C++:创建线程初试的相关文章

多线程_创建线程_继承Thread类

public class ThreadDemo {   public static void main(String[] args){         Demo d = new Demo();   d.start();      for(int i = 0;i < 100;i++){      System.out.println("MainThread" + i);   }   } } class Demo extends Thread {   public void run(

Java并发编程:如何创建线程

一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认为java.exe或者javaw.exe(windows下可以通过任务管理器查看).Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创建线程的话,只会创建一个线程,通常称为主线程.但是要注意,虽然只有一个线程来执行任务,不代表JVM中只有一个线程,JVM实例在创建的时候,同时会创建很多其他的线程(比如垃圾收集器线程). 由于Java采用的是单线程编

Java多线程——创建线程的两种方式

创建线程方式一:继承Thread类. 步骤:1,定义一个类继承Thread类.2,覆盖Thread类中的run方法.3,直接创建Thread的子类对象创建线程.4,调用start方法开启线程并调用线程的任务run方法执行. 可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)主线程的名字就是main. 例: class Demo extends Thread { private String name; Demo(String name) { super(name)

Java创建线程的三种方式

1.继承Runnable接口 package test; class RunnableDemo implements Runnable{ private Thread t; private String threadName; RunnableDemo(String name){ threadName=name; System.out.println("Creating "+name); } public void run(){ System.out.println("Run

创建线程的两种方式

首先我们需要知道什么是线程:是程序执行流的最小单元,包括就绪.阻塞和运行三种基本状态. 举个简单的例子:我们把生活中的两件事吃饭和写作业当作是两个线程,当你正在写作业的时候,爸妈叫你吃饭,你就直接去了,等吃完饭回来后再接着写作业.这就是相当于两个线程其中一个从运行状态转入就绪状态,另一个线程从就绪状态转入运行状态. 创建线程包括继承Thread类和实现Runnable接口两种方式(JDK5.0以后还包括了实现Callable等方式来实现线程,这里不做介绍,感兴趣的小伙伴可以自己查资料),下面介绍

驱动开发之 创建线程函数PsCreateSystemThread

PsCreateSystemThread 创建一个执行在内核模式的系统线程. 注意:创建线程必须用函数PsTerminateSystemThread强制线程结束.否则该线程是无法自动退出的. 函数原型: [cpp] view plain copy print? NTSTATUS PsCreateSystemThread( _Out_      PHANDLE ThreadHandle, _In_       ULONG DesiredAccess, _In_opt_   POBJECT_ATTR

(转)java创建线程的两种方法比较

Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法:  ◆实现Runnalbe接口,重载Runnalbe接口中的run()方法. 为什么Java要提供两种方法来创建线程呢?它们都有哪些区别?相比而言,哪一种方法更好呢? 在Java中,类仅支持单继承

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但是,你应该明白,在每个线程中动态分配和销毁内存块,是需要同步保护的.Delphi语言中有一个在使用多线程环境下至关重要的全局变量IsMultiThread,系统在进行内存分配的时候,根据IsMultiThread变量值判断当前是否使用在多线程环境下,如果该变量为True,哪么,系统在分配和销毁内存的