S.l.e!ep.¢%
像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
86 Line 线程封装类 only for Win32
Posted on 2009-02-07 17:03
S.l.e!ep.¢%
阅读(1724)
评论(3)
编辑
收藏
引用
所属分类:
VC
1
#include
<
windows.h
>
2
#include
<
process.h
>
3
4
class
CThread
5
{
6
public
:
7
CThread()
8
{
9
m_hThread
=
INVALID_HANDLE_VALUE;
10
m_nThreadID
=
0
;
11
m_pfnCall
=
NULL;
12
}
13
14
virtual
~
CThread()
15
{
16
stop();
17
}
18
19
void
setObj(unsigned
int
(
*
pfnCall)(
void
*
pVoid))
20
{
21
m_pfnCall
=
pfnCall;
22
}
23
24
static
unsigned __stdcall _ThreadProc(
void
*
pVoid)
25
{
26
CThread
*
pThis
=
(CThread
*
)pVoid;
27
28
if
( NULL
!=
pThis
->
m_pfnCall )
29
pThis
->
m_pfnCall(pVoid);
30
31
return
0
;
32
}
33
34
bool
start(
void
*
pVoid)
35
{
36
m_hThread
=
(HANDLE)_beginthreadex(NULL,
0
, _ThreadProc, (
void
*
)
this
,
0
,
&
m_nThreadID);
37
38
if
(
0
==
m_hThread )
39
return
false
;
40
else
41
return
true
;
42
}
43
44
bool
stop()
45
{
46
#define
ONE_SECOND 1000
47
48
if
( INVALID_HANDLE_VALUE
==
m_hThread )
49
return
true
;
50
51
BOOL bRet
=
FALSE;
52
DWORD dwRet
=
0
;
53
54
DWORD dwExitCode
=
0
;
55
if
( TRUE
==
::GetExitCodeThread(m_hThread,
&
dwExitCode) )
56
{
57
if
( STILL_ACTIVE
==
dwExitCode )
58
dwRet
=
::WaitForSingleObject(m_hThread, ONE_SECOND);
59
}
60
61
if
( dwRet
==
WAIT_TIMEOUT
||
dwRet
==
WAIT_FAILED )
62
{
63
bRet
=
::TerminateThread(m_hThread,
1
);
64
}
65
else
66
{
67
bRet
=
TRUE;
68
}
69
70
::CloseHandle(m_hThread);
71
72
if
( TRUE
==
bRet )
73
{
74
return
true
;
75
}
76
else
77
{
78
return
false
;
79
}
80
}
81
82
private
:
83
HANDLE m_hThread;
84
unsigned
int
m_nThreadID;
85
unsigned
int
(
*
m_pfnCall)(
void
*
pVoid) ;
86
}
;
Feedback
#
re: 86 Line 线程封装类 only for Win32
回复
更多评论
2009-02-07 17:51 by
陈梓瀚(vczh)
比起m_pfnCall,还是用virtual void Run()=0;好些。
#
re: 86 Line 线程封装类 only for Win32
回复
更多评论
2009-02-07 18:08 by
S.l.e!ep.¢%
以前用 virtual void Run()=0; 造成类爆炸, 做一个功能要写一个类,原来在一个类写两个 static 函数就可以搞定的东西,没必要吧。
#
re: 86 Line 线程封装类 only for Win32
回复
更多评论
2009-02-26 23:42 by
zhuxueling
我也实现过一个线程库。不过接口比你的简单。。
举个例子:
1
class
Msg
{
2
void
message(
int
t)
{
3
std::cout
<<
"
message is: t
"
<<
std::endl;
4
}
5
}
;
6
7
int
main()
{
8
Msg m;
9
Thread t( m,
&
Msg::message,
22
);
10
t.start();
11
t.join();
12
return
0
;
13
}
我喜欢在线程创建时就执行,所以我用start方法,推迟执行。
join方法是等待线程终止的。
线程的构造函数很随意。。
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
com with IE
用XML存储数据的缺陷,优势
VC error C4430 和 C2533 错误
VS2008 控制台 不关闭
函数的返回值是函数指针
VC2005:无法执行添加/移除操作,因为代码元素是只读的....多个解决办法 **输入无提示,解决办法(VA_X_Setup1649)
UNC path 不受support
在vs2008中添加include文件和lib文件
vector 插入问题
VS2008 "当前不会命中断点。源代码与原始版本不同"解决方法
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © S.l.e!ep.¢%
日历
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
公告
mail: sleepwom@163.com (每月一看)
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔分类
(1107)
A·M·F·3(9)
Algorithm (8)
Axis(3)
Book(1)
C++(89)
COM(27)
Crack(39)
CURL(3)
Data Struct(1)
DataBase(14)
Delphi(1)
Design Pattern(11)
DirectUI(14)
DLL(2)
DOS(32)
emule
Encryption (4)
English(7)
epoll(8)
FastDB(10)
Finance(1)
Flash(9)
Game(8)
Game Design(1)
gdb(5)
GFW(1)
Haker
hardware
HTML(39)
ICE(8)
IE_BHO(1)
IM(2)
Inside Windows(2)
InstallShield (7)
Interview(12)
IOCP(19)
Lua(14)
Management(10)
Math(2)
Media(2)
Medical science(1)
MongoDB(4)
MSXML(1)
MulThreads(10)
NetWork(8)
Office Automation(5)
OpenSSL(13)
Oracle(1)
Other(61)
P2P(3)
PE(10)
Plan
ProjectSummary(4)
python(3)
Reactos(1)
Regular expression(2)
Reverse Engineering(5)
RootKit(116)
sed(1)
Server Program(3)
Shell(12)
Skynet(6)
SOAP(5)
SQLite(2)
SSL(3)
STL(3)
System Safe(1)
Team(9)
test(26)
TortoiseSVN(2)
UAC(3)
Unix(89)
Unknown(5)
VB(1)
VBScript(2)
VC(124)
Video Processing(1)
WIN7 + VC(3)
WinDbg(38)
Windows(13)
Windows WDM(61)
Windows扎记(1)
WTL(1)
yacc(3)
Z.E.R.O.M.Q(1)
生活常识(1)
网络协议(2)
系统低层(11)
随笔档案
(1098)
2015年1月 (1)
2014年12月 (9)
2014年11月 (18)
2014年6月 (1)
2014年4月 (2)
2013年9月 (1)
2013年5月 (10)
2012年7月 (3)
2012年4月 (2)
2012年3月 (8)
2012年2月 (6)
2012年1月 (13)
2011年12月 (2)
2011年11月 (3)
2011年10月 (5)
2011年8月 (3)
2011年7月 (8)
2011年6月 (6)
2011年5月 (12)
2011年4月 (28)
2011年3月 (15)
2011年2月 (10)
2011年1月 (16)
2010年12月 (21)
2010年11月 (16)
2010年10月 (6)
2010年9月 (17)
2010年8月 (19)
2010年7月 (25)
2010年6月 (21)
2010年5月 (38)
2010年4月 (10)
2010年3月 (24)
2010年2月 (58)
2010年1月 (78)
2009年12月 (29)
2009年11月 (35)
2009年10月 (152)
2009年9月 (130)
2009年8月 (24)
2009年7月 (2)
2009年6月 (4)
2009年5月 (14)
2009年4月 (31)
2009年3月 (24)
2009年2月 (30)
2009年1月 (45)
2008年12月 (24)
2008年11月 (23)
2008年10月 (16)
文章档案
(1)
2009年2月 (1)
相册
SimpleWord
随笔
收藏夹
(3)
Operation System(3)
Other
DataStruct
数据结构
数据结构
搜索
积分与排名
积分 - 1240774
排名 - 10
最新评论
1. re: linux信号Linux下Signal信号太详细了,终于找到了
写的不错。
--zsx
2. re: 汇编中的test和cmp比较
666666666
--xx
3. re: linux信号Linux下Signal信号太详细了,终于找到了
这篇文章就是个垃圾
--11
4. re: CreateService加载驱动过程
可以在内核太下直接调用这些函数来加载吗?
--peace
5. re: 在VC中彻底玩转Excel
怎样能够提高读写速度
--Touch
6. re: 函数开始处的MOV EDI, EDI的作用收藏
不错,谢谢分享。
--abc
7. re: gcc g++ 4.7 安装泪奔记(续)
最新已经到4.9.2了,还是用Archlinux好。。
--bigeast
8. re: ./lua/addtest.lua:9: attempt to index local 'testobj' (a userdata value)
c++对象导到lua之后成为了一个“userdata ”,原来上面的成员、方法都会访问不了的,只是一个普通的内存块,如果想用,要把方法也倒到Lua。
--陈冠希
9. re: 关于NoSQL,你必须知道的九件事
说的玄而又玄
--cpper
10. re: ./lua/addtest.lua:9: attempt to index local 'testobj' (a userdata value)
lua_touserdata() 不会改变堆栈
--网络兼职
11. re: lua中的closure
这不就是闭包嘛,没啥稀奇的吧。javascript也有 很多脚本语言都有
--evilwk
12. re: lua中的closure
lua有专有名词,叫upvalue
--Quon Lu
13. re: lua函数中的"匿名变量"?
_是用作占位符,表示参数不会使用
有时候函数调用者传入了多个参数,函数用不到的参数,可以用_占位
主要多见于一些回调函数
--Clear
14. re: lua函数中的"匿名变量"?
只是传递可变参数而已,这两个例子是结合演示可变参数吧
--南宫临风
15. re: lua函数中的"匿名变量"?[未登录]
占两个位置,意图何在?
--jcily
16. re: IOCP的一个简单封装类(zz) [转]
例子不能运行
--dsa
17. re: Flash CS3动作面板打开出错[Java运行时环境初始化时出现错误,你可能需要重...
不过我已经有java环境了,为什么还是需要安装呢?而且我想你说的那样做,只有900KB而已啊!怎么回事?
--Echo____g
18. re: The secret life of GetWindowText
评论内容较长,点击标题查看
--allen
19. re: Lua学习笔记
ECCDDFC08D2AE6DCD26DB8B09AE0F6264DFDA306
--xiaoxiao
20. re: 实用命令:利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密 收藏
66F053665DF4F26C7CAA2DE22FBD1B51
--xiaoxiao
21. re: 虚拟键盘(软键盘)设计要点
博主 有个小bug不知道该怎么改
当点击完某个键的时候 时不时会出现 该键还遗留按下去的蓝色 回不到原本颜色
是和页面的刷新快慢有关吗?
非常感谢
--red
22. re: 虚拟键盘(软键盘)设计要点
非常感谢博主!正好要开发软键盘
--red
23. re: C语言中实现不同函数间jump的方法[未登录]
__asm{push 0}
替换为
_alloca(4)
--cpp
24. re: QQ2009 界面技术(DirectUI)
评论内容较长,点击标题查看
--xiaozhi_5638
25. re: sqlite 日期比较.取大于现在时间的记录
评论内容较长,点击标题查看
--威風
26. re: yacc学习笔记(1) 2013.05.11
《flex 与 bison(中文版)》
--coreBugZJ
27. re: yacc学习笔记(1) 2013.05.11
学习一下
--seahouse
28. re: Coroutines in C
mark
--zgpxgame
29. re: 突发奇想 之 远程调用
wcf
--三断笛
30. re: 突发奇想 之 远程调用
rpc
--Richard Wei
31. re: 突发奇想 之 远程调用
函数式编程,参考一下jquery的数据请求。
--漂漂
32. re: 突发奇想 之 远程调用
楼上的,我看了,系统API都有现成的,灰常不错,我喜欢.
--S.l.e!ep.¢%
33. re: 突发奇想 之 远程调用
楼主可以试试协程
--会飞的导弹猪
34. re: 突发奇想 之 远程调用
Lambda 表达式 可以缓解 用起来感觉不错的
--Lo
35. re: 用XML存储数据的缺陷,优势
@是大法官
顶~~~~~~~~
--幻想
36. re: P处理的双进程守护
评论内容较长,点击标题查看
--幻想
37. re: Windows下删除.svn文件夹的最简易方法
这想法好,每次explorer刷新一次都会去做一次,又学到了
--幻想
38. re: OPENSSL 生成 CERT 参考
REQ_DEPT_NAME 等 这些定义在哪? 最好把头文件都给列出来。谢谢!
--吕文华
39. re: DirectUI For WebBrowser
怎么解决IOleInPlaceSiteWindowless::InvalidateRect()无响应的?
--bluesky
40. re: 怎么让Firefox支持ActiveX控件
在 new ActiveXObject 在IE中可以发现在火狐中用什么来代替啊
--陈彦鑫
阅读排行榜
1. linux信号Linux下Signal信号太详细了,终于找到了(45106)
2. 实用命令:利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密 收藏 (8691)
3. 汇编中的test和cmp比较(8590)
4. [转] DirectUI的初步分析(7898)
5. 如何用WinDbg定位内存泄露? (6750)
6. 调用OPENSSL读取PEM文件的灵异问题(6720)
7. 如何区分虚拟网卡与物理网卡(6632)
8. 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects) (转)(6296)
9. 在VC中彻底玩转Excel(6269)
10. vc2005的诡异错误“Windows has triggered a breakpoint in .exe.”(6237)
11. sqlite 日期比较.取大于现在时间的记录(6229)
12. ./lua/addtest.lua:9: attempt to index local 'testobj' (a userdata value)(6204)
13. Linux遭遇Segmentation fault(5999)
14. 今天发现 EnterCriticalSection 里头还是调用了 WaitForSingleObject(5880)
15. 在vs2008中添加include文件和lib文件(5777)
16. shell bash模拟二维数组(5719)
17. DLL Inject -- 一、Windows 钩子(Hooks) - (1)(5652)
18. 静态代码分析工具汇总(5545)
19. lua动态链接库(luaopen_*函数的使用)(5458)
20. [转载]最好的53个 VC++ /MFC 开源软件项目(5437)
21. VC 操作 MDB 文件类(5381)
22. WSARecv 函数(5354)
23. gcc g++ 4.7 安装泪奔记.(5298)
24. HOOK钩子机制学习笔记(4) - 钩子函数说明 收藏 (5191)
25. 关于TCP丢包,断开的疑问(4952)
26. [转]VC++UDP实现可靠传输(文件)(虚拟TCP)((4910)
27. curl应用总结(一)(4833)
28. c和c++中取任意对数的简单方法(4811)
29. 【转】如何高效产生m个n范围内的不重复随机数(m<=n)(4717)
30. lua动态链接库之单个so文件包含多个模块(luaL_requiref函数的使用) (4567)
31. http协议 文件下载原理详解(4493)
32. 反调试技巧总结-原理和实现(4451)
33. set、vector、list和deque 顺序容器(4279)
34. xp下使用vista音量合成器(4263)
35. 如何合并两个vector?(4189)
36. std::tr1::shared_ptr 使用的一点体会 (4049)
37. 编码规范(4040)
38. CMake安装(3973)
39. 实现Sock5代理(转)(3969)
40. X.509 数字证书结构和实例 (3854)
评论排行榜
1. 工作两年后的总结(17)
2. [转载]最好的53个 VC++ /MFC 开源软件项目(12)
3. VMware虚拟机出现Reason: Failed to lock the file(转)(9)
4. 实现了一个写LOG类(9)
5. 封装了IOCP(8)
6. Thread Class(7)
7. 2009的计划(7)
8. Visual C++ 6 令我很晕(6)
9. 突发奇想 之 远程调用(6)
10. SimpleWord界面初稿3(5)
11. Simple Word界面初稿2(5)
12. 内存崩溃的BUG (2) (5)
13. 虚拟键盘(软键盘)设计要点 (5)
14. 内存崩溃的BUG (4) 完成端口的问题? 程序的BUG?(4)
15. 内存崩溃 CASE 3(4)
16. 今天发现 EnterCriticalSection 里头还是调用了 WaitForSingleObject(4)
17. 为了生成flash文件方便,写了个工具(4)
18. 代码坏味3(4)
19. 技术团队管理(一)(4)
20. 复杂的逻辑的BUG(4)
21. 单元测试工具在 MF C编程 中的使用问题 [转] (花了钱在网上下载的一篇文章,郁闷)(4)
22. 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects) (转)(4)
23. 使用cppunit做c++单元测试(3)
24. 代码的坏味2(3)
25. 代码的坏味(3)
26. 关于TCP丢包,断开的疑问(3)
27. 位运算之美——用+,-和位运算实现整数除法和取模(一) (3)
28. 内存崩溃的BUG (3) (3)
29. 也谈 设计模式之Observer模式 (3)
30. MsgWaitForMultipleObjects 后遗症(3)
31. 86 Line 线程封装类 only for Win32(3)
32. QQ2009 界面技术(DirectUI) (3)
33. 写了个双向链表(3)
34. DLL Inject -- 一、Windows 钩子(Hooks) - (1)(3)
35. 突发的 XX Encoding(3)
36. CxImage类库(3)
37. lua函数中的"匿名变量"?(3)
38. lua中的closure(2)
39. ./lua/addtest.lua:9: attempt to index local 'testobj' (a userdata value)(2)
40. yacc学习笔记(1) 2013.05.11(2)