博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows线程
阅读量:3985 次
发布时间:2019-05-24

本文共 1955 字,大约阅读时间需要 6 分钟。

  1 Windows线程

    Windows进程中可以执行代码的实体,Windows
    系统可以调度的执行代码.一个进程中至少有
    一个或多个线程. 每个线程是进程的一个任务
    分支.
    

  2 线程的特点

    2.1 每个线程有一个ID.
    2.2 每个线程有自己的安全属性
    2.3 每个线程有自己的内存栈.
    

  3 进程和线程多任务

    多进程实现的多任务: 由于进程地址空间
      是属于各自私有, 内存和资源不能共享.
    多线程实现的多任务: 由于线程都是位于
      同一个进程的地址空间,内存和资源可以
      共享.
      

  4 线程的执行

    线程的执行方式采用轮询方式执行.
       A -> B -> A -> B.....
       

线程的使用

  1 定义线程处理函数

    DWORD WINAPI ThreadProc(
     LPVOID lpParameter );  //线程参数

  2 创建线程

    HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes,  
      //安全属性
    DWORD dwStackSize, //初始化栈的大小,缺省为0
    LPTHREAD_START_ROUTINE lpStartAddress, 
        //线程的函数指针
    LPVOID lpParameter, //线程参数
    DWORD dwCreationFlags,  //创建方式
    LPDWORD lpThreadId //返回线程ID
    );
    返回值是创建好的线程的句柄.

  3 结束线程

    ExitThread
    TerminateThread

  4 线程挂起和执行

    挂起线程
      DWORD SuspendThread( HANDLE hThread  ); 
    执行线程
     DWORD ResumeThread( HANDLE hThread  );

  5 等候线程的结束

    可以使用 WaitForSingleObject 等候线程的
    结束。

  6 关闭线程句柄

    CloseHandle   释放句柄资源,不代表关闭线程,线程继续执行,

只是句柄不能用了

// ThreadBase.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "conio.h"#include "windows.h"DWORD WINAPI ThreadProc1( LPVOID pParam ){	DWORD nValue = (DWORD)pParam;	for( int nIndex=0; nIndex<10; nIndex++ )	{		printf( "Thread Proc1-------%d\n", 			nValue );		Sleep( 1000 );	}	return 0;}DWORD WINAPI ThreadProc2( LPVOID pParam ){	while( 1 )	{		printf( "-------Thread Proc2\n" );		Sleep( 1000 );	}	return 0;}void Create( ){	DWORD nValue = 100;	//创建一个挂起的线程	DWORD nThreadID = 0;	HANDLE hThread = CreateThread( NULL, 0,		ThreadProc1, (LPVOID)nValue, 		CREATE_SUSPENDED, &nThreadID );	printf( "Thread 1 ID: %d\n", nThreadID );	printf( "Thread 1 Handle: %p\n", hThread );	//执行线程	ResumeThread( hThread );		//等候线程1结束	WaitForSingleObject( hThread, INFINITE );	CloseHandle( hThread );	//创建一个立刻执行的线程	hThread = CreateThread( NULL, 0, 		ThreadProc2, NULL, 0, &nThreadID );	printf( "Thread 2 ID: %d\n", nThreadID );	printf( "Thread 2 Handle: %p\n", hThread );	//挂起线程	//SuspendThread( hThread );	CloseHandle( hThread );}int main(int argc, char* argv[]){	Create( );	getch( );	return 0;}

转载地址:http://vwxui.baihongyu.com/

你可能感兴趣的文章
Encoding Schemes
查看>>
EFM32TG222F32连接JLink V8问题
查看>>
Keil问题
查看>>
移植QT
查看>>
交叉编译qt-everywhere-4.8.4
查看>>
tslib qt4 segmentation fault
查看>>
QT隐藏mouse
查看>>
求最短路径
查看>>
找到一个数组后面第一个大的数
查看>>
找到一个链表中倒数第k个数
查看>>
两个队列实现一个栈
查看>>
用两个栈实现一个带getMin()方法的新型栈
查看>>
头条搜索部门后台开发实习生面经
查看>>
java 线程池
查看>>
设计模式之单例模式
查看>>
自己写的String类能够被加载吗?
查看>>
java让主线程等待所有子线程执行完应该怎么做
查看>>
如此调用
查看>>
计算机的发展史
查看>>
二叉树两个节点最近公共祖先的解法
查看>>