Windows线程


  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;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Barry__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值