win32多线程程序设计
标题是一本书名,写得挺有意思的,是今天早上同事带过来的,我借过来看了一会儿.
然后按照书里面前面几章的内容敲了一些代码,跑了几个例子看了一下.
创建线程的函数:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId );
lpThreadAttributes 描述施行于这一新线程的security属性.NULL表示使用缺省值.
dwStackSize 新线程拥有自己的堆栈,0表示使用缺省值:1MB
lpStartAddress 新线程将开始的地址.这是一个函数指针.
lpParameter 此值将被传送到上述所指定之新线程函数去,作为参数.
dwCreationFlags 允许你产生一个暂时挂起的线程,默认情况是立即开始执行.
lpThreadId 新线程的ID会被传回到这里,他是一个全局变量,可以独一无二地表示系统任一进程中的某个线程.
如果创建成功,传回一个handle,代表新进程,否则传回一个false
例子代码如下:
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <conio.h> DWORD WINAPI ThreadFunc(LPVOID); #define Test2 #ifdef Test1
int main()
{
HANDLE hThrd;
DWORD threadId;
int i;
for (i=;i<;i++)
{
hThrd = CreateThread(NULL,,ThreadFunc,(LPVOID)i,,&threadId);
if (hThrd)
{
printf("Thread launched %d\n",i);
CloseHandle(hThrd);
}
}
//Sleep(2000);
system("pause");
return EXIT_SUCCESS;
} DWORD WINAPI ThreadFunc(LPVOID n)
{
int i;
for (i=;i<;i++)
{
printf("*************%d\n",n);
}
return ;
}
#endif #ifdef Test2
int main()
{
HANDLE hThrd1;
HANDLE hThrd2;
DWORD exitCode1 = ;
DWORD exitCode2 = ;
DWORD threadId; hThrd1 = CreateThread(NULL,,ThreadFunc,(LPVOID),,&threadId);
if (hThrd1)
{
printf("Thread 1 launched\n");
} hThrd2 = CreateThread(NULL,,ThreadFunc,(LPVOID),,&threadId);
if (hThrd2)
{
printf("Thread 2 launched\n");
} for(;;)
{
printf("Press any key to exit..\n");
getch(); GetExitCodeProcess(hThrd1,&exitCode1);
GetExitCodeProcess(hThrd2,&exitCode2);
if (exitCode1 == STILL_ACTIVE)
{
puts("Thread 1 is still running!");
}
if (exitCode2 == STILL_ACTIVE)
{
puts("Thread 2 is still running!");
}
if (exitCode1 != STILL_ACTIVE && exitCode2 != STILL_ACTIVE)
{
break;
}
}
CloseHandle(hThrd1);
CloseHandle(hThrd2); printf("Thread 1 returnd %d\n",exitCode1);
printf("Thread 2 returnd %d\n",exitCode2); //system("pause");
return EXIT_SUCCESS;
} DWORD WINAPI ThreadFunc(LPVOID n)
{
Sleep((DWORD)n**);
return (DWORD)n*;
}
#endif
一些个人感想:同事是中南大学计算机06级的,之前一直在上海工作,已经工作6,7年了,我发现他的书真是多,隔三差五
就带一本计算机方面的书过来,而且都是一些我之前从来没有接触过的书,真是涨了见识,而且他为人非常和善,跟他交流过
几次,没有一点架子,很乐于跟你分享他的一些经验,跟高手待在一起就是好啊!
win32多线程程序设计的更多相关文章
- 由《win32多线程程序设计》临界区的问题所想
之前看侯捷翻译的<win32多线程程序设计>中关于线程同步中的临界区问题,其中举得例子是对链表的操作.死锁的问题是对一个Swaplist函数的问题,现列举代码如下: void SwapLi ...
- 深入浅出Win32多线程程序设计之基本概念
一.深入浅出Win32多线程程序设计之基本概念[转] 引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓 ...
- win32多线程程序设计笔记(第二章)
第二章线程的第一次接触,主要讲了如何创建线程以及需要注意的几点. 一.创建线程 与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主程序同时执行的程序来调用 ...
- win32多线程程序设计笔记(第四章下)
上一笔记讲了同步机制中的临界区域(Critical Sections).互斥器(Mutexes),下面介绍同步机制中的另外两种. 信号量(Semaphores) 举个例子: 现在有人要租车,接待他的代 ...
- win32多线程程序设计笔记(第五章)
前面章节介绍了线程创建等过程,现在的问题是:如何在某个线程内终止另外一个正在运行的线程? windows核心编程中提到终止运行线程的方法: 1)线程函数自己返回: 2)线程通过调用ExitThread ...
- Win32多线程编程(1) — 基础概念篇
内核对象的基本概念 Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API.当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Serv ...
- win32多线程-重写消息循环
最近正在学习<win32多线程程序设计>,这是其中一段重写消息循环的代码事例,以后可能用的上. while (!quit || gNumPrinting > 0) { // Wait ...
- win32多线程编程
关于多线程多进程的学习,有没有好的书籍我接触的书里头关于多线程多进程部分,一是<操作系统原理>里面讲的相关概念 一个是<linux基础教程>里面讲的很简单的多线程多进程编程 ...
- win32多线程-异步(asynchronous) I/O
I/O设备是个慢速设备,无论打印机.调制解调器,甚至硬盘,与CPU相比都奇慢无比,坐下来干等I/O的完成是一件不甚明智事情. 异步(asynchronous) I/O在win32多线程程序设计中被称为 ...
随机推荐
- mysql查找某连续字段中断的编号
查询dj_pxlb表中zwh 空缺的值 select model2.zwh-1 as kqzwh from (select model1.zwh from dj_pxlb as model1 wher ...
- 静态html返回
在这篇文章中我们介绍后台路由的概念,后台的路由根据路径返回相应的内容, 首先我们建立一个服务器 let port = 3000 //监听端口let fs = require ('fs')//用来生成可 ...
- js性能提高篇
,最后统一将DocumentFragment添加到页面. 该做法可以减少页面渲染dom元素的次数.经IE和Fx下测试,在append1000个元素时,效率能提高10%-30%
- org注释包
1.注释包 物种 OrgDB 按蚊(Anopheles) org.Ag.eg.db 拟南芥(Arabidopsis) org.At.tair.db 牛(Brovine) org.Bt.eg.db 蠕虫 ...
- 10.18号java课后动手动脑
问题一结论:类如果提供了一个自定义的构造方法,将导致系统不再提供默认构造方法. 问题二结论:(1)程序运行的结果是100和300,field=200为类的初始化块,可以在类中使用“{”和“}”将语句包 ...
- Spring-data-redis redis
什么是spring-data-redis spring-data-redis是spring-data模块的一部分,专门用来支持在spring管理项目对redis的操作,使用java操作redis最常用 ...
- 根据23423条件,截取字段‘abdecsdsadsadsad’,以ab/dec/sdsa/ds/ads 输出
create or replace procedure p_getString ( p_finalString out varchar2, p_rulestring in number, p_sour ...
- TP3.23 与Laypage 结合进行分页
demo地址:http://tp.ytlwin.top 控制器 <?php namespace Home\Controller; use Think\Controller; class Inde ...
- python--第五天总结
装饰器-- @ 重命名原函数,返回函数对象 是一个函数,至少两层执行函数,被装饰的函数作为参数----------------------------------------------------1 ...
- python网络爬虫《http和https协议》
一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...