标题是一本书名,写得挺有意思的,是今天早上同事带过来的,我借过来看了一会儿.

然后按照书里面前面几章的内容敲了一些代码,跑了几个例子看了一下.

创建线程的函数:

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多线程程序设计的更多相关文章

  1. 由《win32多线程程序设计》临界区的问题所想

    之前看侯捷翻译的<win32多线程程序设计>中关于线程同步中的临界区问题,其中举得例子是对链表的操作.死锁的问题是对一个Swaplist函数的问题,现列举代码如下: void SwapLi ...

  2. 深入浅出Win32多线程程序设计之基本概念

    一.深入浅出Win32多线程程序设计之基本概念[转] 引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓 ...

  3. win32多线程程序设计笔记(第二章)

    第二章线程的第一次接触,主要讲了如何创建线程以及需要注意的几点. 一.创建线程 与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主程序同时执行的程序来调用 ...

  4. win32多线程程序设计笔记(第四章下)

    上一笔记讲了同步机制中的临界区域(Critical Sections).互斥器(Mutexes),下面介绍同步机制中的另外两种. 信号量(Semaphores) 举个例子: 现在有人要租车,接待他的代 ...

  5. win32多线程程序设计笔记(第五章)

    前面章节介绍了线程创建等过程,现在的问题是:如何在某个线程内终止另外一个正在运行的线程? windows核心编程中提到终止运行线程的方法: 1)线程函数自己返回: 2)线程通过调用ExitThread ...

  6. Win32多线程编程(1) — 基础概念篇

      内核对象的基本概念 Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API.当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Serv ...

  7. win32多线程-重写消息循环

    最近正在学习<win32多线程程序设计>,这是其中一段重写消息循环的代码事例,以后可能用的上. while (!quit || gNumPrinting > 0) { // Wait ...

  8. win32多线程编程

    关于多线程多进程的学习,有没有好的书籍我接触的书里头关于多线程多进程部分,一是<操作系统原理>里面讲的相关概念   一个是<linux基础教程>里面讲的很简单的多线程多进程编程 ...

  9. win32多线程-异步(asynchronous) I/O

    I/O设备是个慢速设备,无论打印机.调制解调器,甚至硬盘,与CPU相比都奇慢无比,坐下来干等I/O的完成是一件不甚明智事情. 异步(asynchronous) I/O在win32多线程程序设计中被称为 ...

随机推荐

  1. MVC 中Controller返回值类型ActionResult

    下面列举Asp.net MVC中Controller中的ActionResult返回类型 1.返回ViewResult视图结果,将视图呈现给网页 public ActionResult About() ...

  2. ADO.Net 数据库增加

    数据库增加数据其实就是把查询语句换成了增加语句,后面执行语句用操作变量点出一个执行方法 cmm.ExecuteNonQuery();//关键语句,执行CommandText,的SQL语句,增删改都用这 ...

  3. js jq 实现鼠标经过div背景以进度条方式 变宽,鼠标离开变小,同时文字颜色和原来不一样

    <!DOCTYPE html> <html> <head> <title></title> <script typet="t ...

  4. POJ-2251.DungeonMaster(三维BFS)

    做题时需要注意,爬楼有向上和向下爬之分... 本题大意:输入 l, r, c, 分别代表地牢的楼层数和每层地牢的长和宽,地牢由rock and point and source and key组成,你 ...

  5. Codeforces Beta Round #77 (Div. 2 Only)

    Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...

  6. Python开发【第二篇】:Python基本数据类型

    运算符 设定:a=10,b=20 . 算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型)     在32位机器上,整数的位数为32位,取值范围为- ...

  7. MYSQL之水平分区----MySQL partition分区I(5.1)

    一.        分区的概念 二.        为什么使用分区?(优点) 三.        分区类型 四.        子分区 五.        对分区进行修改(增加.删除.分解.合并) 六 ...

  8. 【Linux 线程】同一个进程中的线程共享哪些资源

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线 ...

  9. 【校招面试 之 网络】第3题 HTTP请求行、请求头、请求体详解

    1.HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE.HEA ...

  10. Django 改变xadmin后台英文为中文

    1.标题 setting.py文件: LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' 修改: LANGUAGE_CODE = 'zh-Hans' TIME_ZONE ...