`
icarusliu
  • 浏览: 232166 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C语言Windows下多线程编程入门

阅读更多
#include <stdio.h>
#include <process.h>
#include <windows.h>

#include "base.h"

#define MAX_RETRY_COUNT 3

HANDLE workThread;
HANDLE prtThread;

void *workThrEntry(void *param);
void *prtThrEntry(void *param);

unsigned int workThrId;
unsigned int prtThrId;

BOOL isWorkThrAlive = BOOL_FALSE;//工作线程是否存活
HANDLE workThrAliveSem;//工作线程是否存活的信号量

RESULT startPrtThread();
RESULT startWorkThread();

void setWorkThrAlive(BOOL b);
BOOL getWorkThrAlive();

void main(void)
{	
	workThrAliveSem = CreateSemaphore(NULL,1,1,(LPCWSTR)"Sem for work thread alive parameter!");

	if (SUCCESS == startPrtThread())
	{
		startWorkThread();
	}
	
	WaitForSingleObject(prtThread,INFINITE);

	CloseHandle(prtThread);
	CloseHandle(workThread);
	CloseHandle(workThrAliveSem);
}

RESULT startWorkThread()
{
	workThread = (HANDLE)_beginthreadex(NULL,0,(unsigned int (_stdcall *)(void *))workThrEntry,0,0,&workThrId);
	if (NULL == workThread)
	{
		printf("ERROR: Create work thread failed!\n");
		setWorkThrAlive(BOOL_FALSE);
		return FAILURE;
	}
	else
	{
		printf("INFO: Create work thread succeed!\n");
		return SUCCESS;
	}
}

RESULT startPrtThread()
{
	prtThread = (HANDLE)_beginthreadex(NULL,0,(unsigned int(_stdcall *)(void *))prtThrEntry,0,0,&prtThrId);
	if (NULL == prtThread)
	{
		printf("ERROR: Create print thread failed!\n");
		return FAILURE;
	}
	else
	{
		printf("Info: Create print thread succeed!\n");
		return SUCCESS;
	}
}

void *workThrEntry(void *param)
{
	setWorkThrAlive(BOOL_TRUE);

	while (1)
	{
		
	}

	setWorkThrAlive(BOOL_FALSE);

	return NULL;
}

/**
 * 每秒针检测工作线程是否退出,没退出则打印相关信息。
 **/
void *prtThrEntry(void *param)
{
	int retryCount = 0;
	BOOL isFirstPrint = BOOL_TRUE;

	while (1)
	{
		if (BOOL_FALSE == getWorkThrAlive())
		{
			if (MAX_RETRY_COUNT == retryCount)
			{
				printf("INFO: The work thread has extied!\n");
				break;
			}
			else
			{
				Sleep(500);
				retryCount++;
				continue;
			}
		}

		if (BOOL_TRUE == isFirstPrint)
		{
			printf("Running...");
			isFirstPrint = BOOL_FALSE;
		}
		else
		{
			printf(".");
		}
		Sleep(500);
	}

	return NULL;
}

void setWorkThrAlive(BOOL b)
{
	WaitForSingleObject(workThrAliveSem,INFINITE);
	isWorkThrAlive = b;
	ReleaseSemaphore(workThrAliveSem,1,NULL);
}

BOOL getWorkThrAlive()
{
	BOOL b;
	WaitForSingleObject(workThrAliveSem,INFINITE);
	b = isWorkThrAlive;
	ReleaseSemaphore(workThrAliveSem,1,NULL);
	return b;
}
 
 

执行结果如下:


  • 大小: 27.3 KB
分享到:
评论

相关推荐

    Linux C语言编程入门

    Linux C语言编程入门,Linux下的C语言编程指南

    Linux下C语言应用编程

    Linux下C语言应用编程》深入浅出地讲解了Linux下C应用程序开发所需的基本工具、知识和技巧,主要包括:开发工具的使用和技巧、文件I/O编程、多进程编程、进程间通信、多线程编程、网络编程等内容。可以让读者轻松、...

    socket linux c++ 多线程3

    最近几个月总结和网上收集资料第三套:c语言Socket编程多线程编程入门指导Socket编程Thread_多线程Linux下的多线程编程等10多个资料....

    简单的多线程编程例子

    一个非常简洁的多线程编程例子,纯C语言编写,非常适合多线程的入门

    unix平台下c语言高级编程指南

    本书范例丰富,且具有代表性,如Socket编程、客户/服务端编程、多线程开发、CGI编程、X Windows下的Motif编程等。读者直接或只需稍作修改就可以将它们应用到自己的应用程序开发中。这些范例的源代码可以从配套光盘的...

    linux C语言 网络编程教程及源码

    18、Linux网络编程18——tcp并发服务器(多线程) 19、Linux网络编程——tcp高效并发服务器(select实现) 20、Linux网络编程——tcp高效并发服务器(poll实现) 21、Linux网络编程——tcp高效并发服务器(epoll实现...

    C语言和C++语言的区别是什么?快速入门C++编程的方法解析.docx

    除此之外,C++还支持异常处理、命名空间、RTTI(运行时类型识别)和多线程等特性,这些特性可以帮助程序员更好地编写高效、健壮的程序。另外,C++还支持底层编程,因此可以编写与硬件相关的程序,例如操作系统、驱动...

    多线程服务器.rar

    C语言编写的多线程服务器,用于入门学习网络编程,也可提高对线程的理解吧。

    Linux下的编程.rar

    Linux shell编程V1pdf Linux操作系统下C语言编程入门.pdf ...Linux系统下的多线程编程入门,pdf Lnu下的C编程实战pdf Shel高级编程(中文版).pdf 高级Bash脚本编程指南-中文版pdf 嵌入式 LInux应用程序开发详解(1-11)pd

    linux编程相关资料集合

    linux编程相关资料集合:Linux shell编程,Linux操作系统下C语言编程入门,Linux网络编程,Linux系统下C程序开发详解,Linux系统下的多线程编程入门,Linux下的C编程实战,Shell高级编程,高级Bash脚本编程指南,...

    宋劲彬的嵌入式C语言一站式编程

    C语言入门 1. 程序的基本概念 1. 程序和编程语言 2. 自然语言和形式语言 3. 程序的调试 4. 第一个程序 2. 常量、变量和表达式 1. 继续Hello World 2. 常量 3. 变量 4. 赋值 5. 表达式 6. 字符类型与字符编码 3. ...

    Windows程序设计笔记(1,2,3)

    在当今RAD工具充斥市场的今天,该书依然是新手从事Windows下软件开发入门的不二之选。本人从事Windows平台软件开发已近三年,Windows相关的书籍和文档也阅读过不少,直到接触该书之后,好多以往含糊不清的概念才一下...

    windows环境下32位汇编语言程序设计

    在Windows下用任何语言编程都必须遵循Windows的规范,汇编也不例外,也就是说,汇编不再是一种“有特权”的语言。面对汹涌而来的Visual C++,Visual Basic,PowerBuilder和Java等各个领域的猛将,从DOS时代...

    嵌入式Linux应用程序开发详解.rar

    嵌入式Linux应用程序开发详解.rar 第1章 Linux快速入门.pdf 第2章 Linux基础命令.pdf ...第9章 多线程编程.pdf 第10章 嵌入式Linux网络编程.pdf 第11章 嵌入式Linux设备驱动开发.pdf 第12章 Qt图形编程.pdf

    [.Net] 零基础学C#(全彩版) 明日科技

    全书共分16章,包括Visual Studio的安装、踏上C#开发的征程、必须学会的C#语法、流程控制语句、看似简单的字符串、面向对象程序设计、Windows交互式图形界面、数据访问技术、程序调试与异常处理、多线程编程技术以及...

    基于C语言的精品课程网源码.zip

    内容关键词:变量、数据类型、运算符、控制流、类、对象、继承、多态、异常处理、集合框架、泛型、多线程、网络编程、文件IO、数据库连接(JDBC)等 用途:Java源码系统是用于学习、实践和开发Java应用程序的资源。...

    零基础学C#+代码+视频+光盘资料 提取码4xvw

    全书共分16章,包括Visual Studio的安装、踏上C#开发的征程、必须学会的C#语法、流程控制语句、看似简单的字符串、面向对象程序设计、Windows交互式图形界面、数据访问技术、程序调试与异常处理、多线程编程技术以及...

    零基础学C#全彩扫描明日科技出版

    全书共分16章,包括Visual Studio的安装、踏上C#开发的征程、必须学会的C#语法、流程控制语句、看似简单的字符串、面向对象程序设计、Windows交互式图形界面、数据访问技术、程序调试与异常处理、多线程编程技术以及...

    嵌入式应用层开发要学习什么?

    精通嵌入式Linux下的程序设计,精通嵌入式Linux开发环境,强化对Linux应用开发的理解和编码调试的能力,包括系统编程、文件I/O、多进程和多线程、网络编程、GUI图形界面编程、数据库。 第四阶段嵌入式入门阶段-ARM...

Global site tag (gtag.js) - Google Analytics