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多线程程序设计中被称为 ...
随机推荐
- tensorflow serving 之minist_saved_model.py解读
最近在学习tensorflow serving,但是就这样平淡看代码可能觉得不能真正思考,就想着写个文章看看,自己写给自己的,就像自己对着镜子演讲一样,写个文章也像自己给自己讲课,这样思考的比较深,学 ...
- xm数据写入
reshape有两个参数: 其中,参数:cn为新的通道数,如果cn = 0,表示通道数不会改变. 参数rows为新的行数,如果rows = 0,表示行数不会改变. 注意:新的行*列必须与原来的行*列相 ...
- flexible
https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html
- jvm中堆和栈的区别
1.前言. 其实jvm能优化的空间不多,最主要的是使用的共享内存不要超过默认的2g或者自己调的参数.但了解一下还是有点意思的,建议面试时还是要看,别学笔者裸奔. 2.区别. 网上说是有5点区 ...
- Velocity Obstacle
[Velocity Obstacle] Two circular objects A,B, at time t(0), with velocity V(A),V(B). A represent the ...
- 766. Toeplitz Matrix
A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element. Now given ...
- 10大H5前端框架(转)
10大H5前端框架 作为一名做为在前端死缠烂打6年并且懒到不行的攻城士,这几年我还是阅过很多同门从知名到很知名的各种前端框架,本来想拿15-20个框架来分享一下,但在跟几个前辈讨教写文章的技巧时果断被 ...
- HibernateDaoSupport类的使用(转)
看到一篇很好描述HibernateDaoSupport类使用的例子,特此在这和大家分享一下 核心提示:1. 继承了HibernateDaoSupport类的类获取session时,已不可用Sessio ...
- 第四章 栈与队列(c5)栈应用:逆波兰表达式
- Ubuntu 14.04 LTS 安装Docker(转)
转自:https://www.cnblogs.com/leolztang/p/5097278.html Docker官方是有很详细的安装文档(https://docs.docker.com/engin ...