例子演示如何创建一个新线程,动态分配内存 - 范文中心

例子演示如何创建一个新线程,动态分配内存

05/25

示例

编辑

CreateThread 函数从一个进程里面创建一个线程。这个开始的线程必须指定开始执行代码的地址,新线程执行。有代表性的,开始地址就是一个函数名。这个函数有一个参数,并且返回一个 DWORD 值。一个进程里面同时有多个线程在执行。

下面这个例子演示如何创建一个新线程,执行本地定义的函数。 ThreadProc. 建立的线程动态分配内存传递信息到每个线程的实例中。线程函数负责释放这些内存。

被调用的线程用 WaitForMultipleObjects 持续等待,直到所有的工作线程退出。在线程退出后,关掉线程函数的句柄。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

#include

#include //win2003SDK必须安装 要不无此头文件。此文件是为了实现StringCchPrintf,StringCchLength。

#define MAX_THREADS    3

#define BUF_SIZE    255

typedef struct _MyData{

int val1;

int val2;

}MYDATA,*PMYDATA;

DWORD WINAPI ThreadProc(LPVOID lpParam)

{

HANDLE hStdout;

PMYDATA pData;

TCHAR msgBuf[BUF_SIZE];

size_tcchStringSize;

DWORD dwChars;

hStdout=GetStdHandle(STD_OUTPUT_HANDLE);

if(hStdout==INVALID_HANDLE_VALUE)

return 1;

//Cast the parameter to the correct data type.

pData=(PMYDATA)lpParam;

//Print the parameter values using thread-safe functions.

StringCchPrintf(msgBuf,BUF_SIZE,TEXT("Parameters=%d,%d\n"),

pData->val1,pData->val2);

StringCchLength(msgBuf,BUF_SIZE,&cchStringSize);

WriteConsole(hStdout,msgBuf,cchStringSize,&dwChars,NULL);

//Free the memory allocated by the caller for the thread

//data structure.

HeapFree(GetProcessHeap(),0,pData);

return 0;

}

void main()

{

PMYDATA pData;

DWORD dwThreadId[MAX_THREADS];

HANDLE hThread[MAX_THREADS];

int i;

//Create MAX_THREADS worker threads.

for(i = 0; i

{

//Allocate memory for thread data.

pData=(PMYDATA)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,

sizeof(MYDATA));

if(pData==NULL)

ExitProcess(2);

//Generate unique data for each thread.

pData->val1=i;

pData->val2=i+100;

hThread[i]=CreateThread(

NULL,//default security attributes

0,//use default stack size

ThreadProc,//thread function

pData,//argument to thread function

0,//use default creation flags

&dwThreadId[i]);//returns the thread identifier

//Check there turn value for success.

if(hThread[i]==NULL)

{

ExitProcess(i);

}

}

//Wait until all threads have terminated.

WaitForMultipleObjects(MAX_THREADS,hThread,TRUE,INFINITE);

//Close all thread handle supon completion.

for(i=0;i

{

CloseHandle(hThread[i]);

}

}


相关内容

  • 进程间通信方式比较
    进程间的通信方式: 1.管道(pipe)及有名管道(named pipe): 管道可用于具有亲缘关系进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信. 2.信号(signal): 信号是在软件层次上对中断机制 ...
  • 嵌入式经典面试题
    嵌入式经典面试题六: 关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体 ...
  • JAVA复试问题答案
    (一) JAVA复试的问题整理 1 Hibernate 的优化流程是如何实现的,流程是怎么样? 1. 尽量使用many-to-one ,避免使用单向one-to-many 象 2 Struts1与Struts2的区别? 在Action 实现 ...
  • 常见英语缩写
    [转] 常见英文缩写 常用英文缩写 VIP = very important person重要人物 IMP (import)进口 EXP (export)出口 MAX (maximum)最大的.的最大限度的 MIN (minimum)最小的 ...
  • 计算机专业认识实习报告
    认识实习报告 学 号: XXXXXXXXXXXXX 姓 名: XXXXX 指导教师: XXXXX 专业名称: 网络工程 计 算 机 与 自 动 控 制 学 院 2010年 9 月 22 日 一. 实习目的: 对计算机有一个较为系统全面的认识 ...
  • Dubbo路由模块设计说明书
    Dubbo 路由模块 设计说明书 修改记录 1 目录 1. 1.1. 1.2. 引言 ............................................................................. ...
  • 第一章作业 参考答案
    第一章作业 1.设计现代OS 的主要目标是什么? 答:有效性.方便性.可扩充性.开放性. 12.试从交互性.及时性以及可靠性方面,将分时系统与实时系统进行比较. 答: a. 交互性:分时系统是一种通用系统,主要用于运行终端用户程序,因而它具 ...
  • WinCE的实时性
    提到WinCE及工业控制,也许有人对WinCE的实时性能否满足工业控制要求产生疑问.诚然,WinCE的实时性不如QNX,也不如VxWOrks,但是大量文献表明WinCE的确是嵌入式实时操作系统,也在工业控制市场占有相当的份额.究其原因,离不 ...
  • 苏亚星多媒体教学网V8.1应用方案
    **图书馆VOD 视频点播系统方案 **学校 多媒体教学系统方案 项目名称:**学校多媒体教学系统方案 制作单位:南京苏亚星资讯科技开发有限公司 编制日期: **图书馆VOD 视频点播系统方案 目 录 一.需求分析 ............ ...
  • Android 高级面试题及答案
    阅读目录 一 性能优化 1.如何对 Android 应用进行性能分析 android 性能主要之响应速度 和UI刷新速度. 可以参考博客:Android系统性能调优工具介绍 首先从函数的耗时来说,有一个工具TraceView 这是andro ...