首页 > 编程语言 >Win32编程之线程开发(八)

Win32编程之线程开发(八)

时间:2023-09-16 15:48:26浏览次数:55  
标签:char lpThreadParameter 编程 LPVOID Win32 线程 DWORD include

一、线程概念

(1).Windows线程是可以执行的代码的实例,系统是以线程为单位调度程序,一个程序当中可以有多个线程,实现多任务的处理

(2).Windows线程的特点:

  • 线程都具有一个ID
  • 每个线程都具有自己的内存栈
  • 同一进程中的线程使用同一个地址空间

(3).线程的调度:操作系统将CPU的执行时间划分成时间片,依次根据时间片执行不同的线程,线程轮询:线程A->线程B->线程A...

二、线程的使用

1.创建线程

HANDLE WINAPI CreateThread(
    _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, //安全属性
    _In_ SIZE_T dwStackSize, //线程栈的大小
    _In_ LPTHREAD_START_ROUTINE lpStartAddress, //线程处理函数的函数地址
    _In_opt_ __drv_aliasesMem LPVOID lpParameter, //传递给线程处理函数的参数
    _In_ DWORD dwCreationFlags, //线程的创建方式
    _Out_opt_ LPDWORD lpThreadId //创建成功,返回线程的ID
);
创建成功,返回线程句柄

2.定义线程处理函数 

DWORD WINAPI ThreadProc(
    LPVOID lpParameter //创建线程时,传递给线程的参数
);

示例代码:

#include <Windows.h>
#include <iostream>

using namespace std;

DWORD CALLBACK ThreadProc(LPVOID lpThreadParameter) {
	char* szText = (char*)lpThreadParameter;
	while (true) {
		cout << szText << endl;
		Sleep(1000);
	}

	return 0;
}

int main() {
	const char* pszText = "********";
	DWORD nID = 0;
	HANDLE hThread = CreateThread(NULL, 0, ThreadProc, (LPVOID)pszText, 0, &nID);
	if (hThread == NULL) {
		cout << "create thread failed" << GetLastError();
	}

	system("pause");

	return 1;
}

三、线程挂起和销毁

(1).线程的挂起

DWORD SuspendThread(
	HANDLE hThread //handle to thread	
);

(2).线程的唤醒 

DWORD ResumenThread(
	HANDLE hThread //handle to thread
);

示例代码: 

#include <Windows.h>
#include <iostream>

using namespace std;

DWORD CALLBACK ThreadProc(LPVOID lpThreadParameter) {
	char* szText = (char*)lpThreadParameter;
	while (true) {
		cout << szText << endl;
		Sleep(1000);
	}

	return 0;
}

DWORD CALLBACK ThreadProc1(LPVOID lpThreadParameter) {
	char* szText = (char*)lpThreadParameter;
	while (true) {
		cout << szText << endl;
		Sleep(1000);
	}

	return 0;
}

int main() {
	const char* pszText = "********";
	DWORD nID = 0;
	//线程立即执行
	HANDLE hThread = CreateThread(NULL, 0, ThreadProc, (LPVOID)pszText, 0, &nID);
	if (hThread == NULL) {
		cout << "create thread failed" << GetLastError();
	}

	const char* pszText1 = "--------";
	DWORD nID1 = 0;
	//线程挂起
	HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc1, (LPVOID)pszText1, CREATE_SUSPENDED, &nID1);
	if (hThread1 == NULL) {
		cout << "create thread failed" << GetLastError();
	}

	getchar();
	SuspendThread(hThread);
	ResumeThread(hThread1);
	getchar();

	return 1;
}

  

 

标签:char,lpThreadParameter,编程,LPVOID,Win32,线程,DWORD,include
From: https://www.cnblogs.com/TechNomad/p/17706797.html

相关文章

  • C++ STL 编程指北
    C++STL编程指北未避免歧义,所有容器的swap方法和不常用方法均未写1.vector向量容器用一句话来说,vector就是可变长数组。但vector所支持的可变长特性,并不是在原空间之后接续新空间来实现的,因为无法保证之后尚有可供分配的空间。底层实现上当增加新元素时,如果当前vector容......
  • 《安富莱嵌入式周报》第307期:开源智能制冷板,Keil MDK6发布时间,编程助手Github Copilot
     视频版:https://www.bilibili.com/video/BV1fV4y1X7sk 1、KeilMDK6最终定于2023年末发布https://www.keil.com/pr/article/1302.htmMDK6的发布消息最终尘埃落定,定于2023年末发布。相比现在的MDK,主要是集成了功能安全库及其编译器,KeilStudio桌面版,跨平台支持。2、开源智能冷却板......
  • [腾讯云Cloud Studio实战训练营]无门槛使用GPT+Cloud Studio辅助编程完成Excel自动工
    @TOC前言chatgpt简单介绍:ChatGPT是一种基于GPT的自然语言处理模型,专门用于生成对话式文本。它是OpenAI于2021年发布的,在广泛的对话数据集上进行了训练,旨在提供更具交互性和适应性的对话体验。与传统的问答系统不同,ChatGPT设计用于处理连续的对话而不仅仅是单独的问题和回答。它可......
  • 《安富莱嵌入式周报》第314期:微软推出开源DeviceScript编程语言适合低资源单片机,开源
    视频版:https://www.bilibili.com/video/BV1HM4y1e7ke/  1、微软推出开源DeviceScript编程语言,面向物联网方向,适合低资源单片机官网:https://microsoft.github.io/devicescript/开源:https://github.com/microsoft/devicescript/文档:https://microsoft.github.io/devicescript/int......
  • Win32编程之动态库(七)
    一、动态库的特点运行时独立存在源码不会链接到执行程序使用时加载(使用动态库必须使用动态库执行)与静态库的比较:由于静态库是将代码嵌入到使用程序中,多个程序使用时,会有多份代码,所有代码体积会增大,动态库的代码只需要存在一份,其他程序通过函数地址使用,所以代码体积小;静态库......
  • CompletableFuture 异步多线程D优雅!
    一个示例回顾Future一些业务场景我们需要使用多线程异步执行任务,加快任务执行速度。JDK5新增了Future接口,用于描述一个异步计算的结果。虽然Future以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,我们必须使用Future.get()的方式阻塞调用线程,或者使用轮......
  • Win32编程之静态库(六)
    一、静态库的特点运行不存在静态库源码被链接到调用程序中目标程序的归档二、C语言静态库1.C静态库的创建创建一个静态库项目添加库程序,源文件使用C文件2.C静态库的使用库路径的设置:可以使用pragma关键字设置;#pragmacomment(lib,"../lib/clib.lib")三、C++语言......
  • 结构化编程
    学习一门技术最好的方式就是阅读官方文档,可以查看MATLAB官方文档流程控制语句和逻辑运算符与大多数编程语言相同,MATLAB有以下流程控制语句:流程控制语句作用if,elseif,else若if语句为真,则执行子句switch,case,otherwise根据switch语句内容判断执行哪个子句while重复执行子句......
  • 《Java编程思想第四版》学习笔记28
    //:PrintFile.java//Shorthandclassforopeninganoutputfile//forhuman-readableoutput.packagecom.bruceeckel.tools;importjava.io.*;publicclassPrintFileextendsPrintStream{publicPrintFile(Stringfilename)throwsIOException{super(n......
  • spring依赖注入单例模式下(默认都是单例),类变量(实例变量)线程安全问题
    java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。Java的变量类型有:   成员变量类中的变量(独立于方法之外的变量)   局部变量类的方法中的变量。而java类的成员变量又有俩种:   静态变量(类变量):独立于方法之外的变量,用static修饰。   实例变......