win32线程退出C语言,win32C语言多线程.doc

本文介绍了在Win32环境下使用C语言进行多线程编程的方法。通过_beginthread()和_endthread()函数创建和结束线程,详细解释了线程的基本概念和函数用法,并提供了一个简单的实例来展示线程并发执行的效果。在实践中可能会遇到参数传递和编译错误等问题,文中给出了相应的解决方案。
摘要由CSDN通过智能技术生成

win32C语言多线程

Win32下C语言多线程操作

曹玉坤

2011-7-12

目 录

1概述3

2函数讲解3

3实例应用4

4总结7

概述

多线程的操作为我们提供了一种多任务,并发的工作方式,提高了工作效率。并且在很多场合我们需要程序能够同时进行多个操作,这是就用到了多线程。

说起多线程,我们首先了解一下几个基本概念。

首先是进程,一个程序开始运行,那么它就是一个进程,包括程序本身及程序所用到的内存和其他资源。

其次是线程,线程是程序中的一个执行流。每个线程都有自己的寄存器等等,但代码区是共享的。

再次我们说说进程和线程之间的关系。一个进程中可以包含一个或多个线程。只有一个的我们称之为单线程程序,有多个线程的我们称之为多线程程序,即包含多个执行流,各个线程执行不同的任务,合作完成程序的功能。

函数讲解

我们先来讲解要用到的头文件及函数。在这里我们接受_beginthread()函数和_endthread()函数。这两个函数是配对使用的,且都包含在process.h头文件里。

_beginthread()用了创建新的除主线程外的新的线程。创建成功返回新线程的编号,失败返回-1。包含三个参数,分别是线程执行流调用的函数、线程堆栈的深度(通常为0,系统按需求自动分配)和传入函数的参数。

_endthread()函数没有参数,用于关闭当前线程。

下面我们来通过一个实例来详细讲解其用法。

实例应用

我们在一段程序中演示创建新的线程,并通过标识来理解其工作原理。

首先我们先看看代码:

#include

#include

#include

void testFun(int *a)

{

int i=0,b=10;

for(i=0;i<4;i++)

{

printf("this is the thread we created %d\n" , a[i]);

}

printf(" this is b = %d",b);

_endthread();

}

main()

{

int j=0,b=10;

int a[4]={0,1,2,3};

int hand=-1;

hand=_beginthread(testFun,0, &a);

if(hand==-1)

{

printf("thread creating failed\n");

}

else

{

printf("thread created sucessfully %d\n\n",hand);

}

for(j=0;j<10;j++)

{

printf("this is the main thread\n");

}

}

这段代码很简单,就是在主程序中显示标识,在新建线程中显示标识。我们通过其显示结果来理解线程的工作方式。

通过结果我们可以看到,主程序中的标识,和线程中的标识都被执行,且其顺序是随机的。

总结

在做的过程中大家可能会遇到一些小问题。这里我先讲两个。

第一:新线程的函数传递问题,怎样才能传递多个参数呢?因为传参是地址传递,我解决的办法是将参数放在同一个数组里,当然如果是不同类型的,可以尝试采用结构体。

第二: 在编译时,报出_beginthread()不可知的错误。这个是因为在创建工程时,将工程创建为单线程程序的问题。我们只需要修改如图中的 use run-time library 为debug multithreaded就可以了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值