作者godman362 (青)
看板NUU_CSIE
标题[笔记] WinAPI Thread & Event (1)
时间Sun Jun 7 10:54:59 2009
最近受
WinAPI荼毒很大
晚上睡觉都会因为这个恶梦突然惊醒和睡不着
所以讲一些东西让大家一起被荼毒好了(误)
以下,我们指介绍WinAPI中的
Thread和
Event
其他东西太多,有用到的就自己去查吧
因为我习惯只讲常用的东西,不常用的就自己看吧
Thread在很多地方都可以看得到
现在很多语言也都有支援Thread的用法
像是Java、VC++、C#之类的语言
但是像纯C/C++,自身没有这样的lib或函数可以使用
必须额外的去载用
pthread才能够使用
而pthread是Linux底下的POSIX Thread
因此,若不想额外载用lib的话,实质上C/C++是没辄的
但是这个部份,
M$有帮Programmer增加这样的功能
也就是所谓的WinAPI
不过这些API的参数实在是很难看的懂
没有去查
winbase.h,实在是不懂原始的型态是什麽鬼
所以真的要用WinAPI的人,记得翻一下
好,废话讲太多了,接着来讲
Thread
要建一个Thread,则是利用下面这个函数:
HANDLE CreateThread (
LPSECURITY_ATTRIBUTES IpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID IpParameter,
DWORD dwCreationFlags,
LPDWORD IpThreadId
);
见识到了吗?这就是WinAPI诡谲的参数?
当然,不用管他那麽多,有些参数就直接设deafault值就好
下面来个别解释每一个参数的意义,这个部份我也是参考来的:
lpThreadAttributes 描述施行於新执行绪的security属性。
NULL表示使用预设值
dwStackSize 新执行绪拥有自己的堆叠。
0表示使用预设大小 : 1MB
lpStartAddress 新执行绪将开始的起始位址。
传入一个函式。
lpParameter 此值将被传送到所上述指定的新执行绪函式作为
参数,
就是把你要执行的函数参数传进来
dwCreationFlags 允许你产生一个暂时虚悬的执行绪。
预设情况是0,就是立即开始执行。
lpThreadId 新执行绪的ID会被传回到这里
光是这样解释,我想应该是没人看得懂这个函数要怎麽用
所以我把重点都用
红色标明
下面再来举个例子,应该就会比较好懂:
unsigned long
ThreadID;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTIME)Func, NULL, 0, &ThreadID);
这样就可以建立一个Thread了
但是如果有详细看的话,应该会注意到CreateThread有
回传值
型态是
HANDLE,所以最好宣告一个HANDLE去
承接他
尤其是你的Thread
若是执行一个Infinite Loop的时候,一定要这样做
否则你的Main Thread一旦提早结束,就
没人管你的Thread了
至於要怎麽管理Thread,这个就会牵扯到前面的
回传值
因为管理Thread,除了他没有别的办法
有开始,必然有结束
所有有CreateThread,必然也有ExitThread
那ExitThread就没什麽困难了
在Thread结束的时候,呼叫ExitThread就可以完整结束Thread
以下是ExitThread的函数:
ExitThread(DWORD deExitCode);
他只有一个参数,就是把你刚刚的ThreadID丢进去给他就可以了
至於管理,就和下一篇的Event一起讲好了
下篇见。
--
邮差又来按阴阳了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.118.39.226
1F:→ tuzr:哈哈哈哈! 我前两个月都在被Win32API荼毒阿! e04... 06/07 13:39
2F:→ godman362:干....换我了说 06/07 14:38
3F:→ godman362:最近好忙~"~ 下篇可能要等很久了.... 06/10 22:20