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

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

创建线程的函数:

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. tensorflow serving 之minist_saved_model.py解读

    最近在学习tensorflow serving,但是就这样平淡看代码可能觉得不能真正思考,就想着写个文章看看,自己写给自己的,就像自己对着镜子演讲一样,写个文章也像自己给自己讲课,这样思考的比较深,学 ...

  2. xm数据写入

    reshape有两个参数: 其中,参数:cn为新的通道数,如果cn = 0,表示通道数不会改变. 参数rows为新的行数,如果rows = 0,表示行数不会改变. 注意:新的行*列必须与原来的行*列相 ...

  3. flexible

    https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html

  4. jvm中堆和栈的区别

    1.前言.    其实jvm能优化的空间不多,最主要的是使用的共享内存不要超过默认的2g或者自己调的参数.但了解一下还是有点意思的,建议面试时还是要看,别学笔者裸奔. 2.区别.   网上说是有5点区 ...

  5. Velocity Obstacle

    [Velocity Obstacle] Two circular objects A,B, at time t(0), with velocity V(A),V(B). A represent the ...

  6. 766. Toeplitz Matrix

    A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element. Now given ...

  7. 10大H5前端框架(转)

    10大H5前端框架 作为一名做为在前端死缠烂打6年并且懒到不行的攻城士,这几年我还是阅过很多同门从知名到很知名的各种前端框架,本来想拿15-20个框架来分享一下,但在跟几个前辈讨教写文章的技巧时果断被 ...

  8. HibernateDaoSupport类的使用(转)

    看到一篇很好描述HibernateDaoSupport类使用的例子,特此在这和大家分享一下 核心提示:1. 继承了HibernateDaoSupport类的类获取session时,已不可用Sessio ...

  9. 第四章 栈与队列(c5)栈应用:逆波兰表达式

  10. Ubuntu 14.04 LTS 安装Docker(转)

    转自:https://www.cnblogs.com/leolztang/p/5097278.html Docker官方是有很详细的安装文档(https://docs.docker.com/engin ...