由一个成员函数来启动一个线程
来源:互联网 发布:java程序设计教程赵辉 编辑:程序博客网 时间:2024/06/06 00:41
/*shows how to start a thread based on a
class memeber function using a static member function.*/
#define WIN32_LEAN_AND_MEAN
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<process.h>
typedef unsigned(WINAPI *PBEGINTHREADEX_THREADFUNC)(LPVOID lpThreadParameter);
typedef unsigned *PBEGINTHREADEX_THREADID;
/*this threadobject is created by a
thread that wants to start another thread.
All public member functions except ThreadFunc()
are called by that original thread.The virtual function
ThreadMemberFunc()is the start og the new thread.
*/
class ThreadObject
{
public:
ThreadObject();
void StartThread();
void WaitForExit();
static DWORD WINAPI ThreadFunc(LPVOID param);
protected:
virtual DWORD ThreadMemberFunc();
HANDLE m_hThread;
DWORD m_ThreadId;
};
ThreadObject::ThreadObject()
{
m_hThread = NULL;
m_ThreadId = 0;
}
void ThreadObject::StartThread()
{
m_hThread = (HANDLE)_beginthreadex(NULL, 0,
(PBEGINTHREADEX_THREADFUNC)ThreadObject::ThreadFunc,
(LPVOID) this, 0, (PBEGINTHREADEX_THREADID)&m_ThreadId);
if (m_hThread)
printf("Thread lauched\n");
}
void ThreadObject::WaitForExit()
{
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);
}
//static member functions have no "this" pointer;
DWORD WINAPI ThreadObject::ThreadFunc(LPVOID param)
{
//Use the param as the address of the object
ThreadObject *pto = (ThreadObject*)param;
return pto->ThreadMemberFunc();
}
DWORD ThreadObject::ThreadMemberFunc()
{
//do something useful...
return 0;
}
void main()
{
ThreadObject obj;
obj.StartThread();
obj.WaitForExit();
}
class memeber function using a static member function.*/
#define WIN32_LEAN_AND_MEAN
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<process.h>
typedef unsigned(WINAPI *PBEGINTHREADEX_THREADFUNC)(LPVOID lpThreadParameter);
typedef unsigned *PBEGINTHREADEX_THREADID;
/*this threadobject is created by a
thread that wants to start another thread.
All public member functions except ThreadFunc()
are called by that original thread.The virtual function
ThreadMemberFunc()is the start og the new thread.
*/
class ThreadObject
{
public:
ThreadObject();
void StartThread();
void WaitForExit();
static DWORD WINAPI ThreadFunc(LPVOID param);
protected:
virtual DWORD ThreadMemberFunc();
HANDLE m_hThread;
DWORD m_ThreadId;
};
ThreadObject::ThreadObject()
{
m_hThread = NULL;
m_ThreadId = 0;
}
void ThreadObject::StartThread()
{
m_hThread = (HANDLE)_beginthreadex(NULL, 0,
(PBEGINTHREADEX_THREADFUNC)ThreadObject::ThreadFunc,
(LPVOID) this, 0, (PBEGINTHREADEX_THREADID)&m_ThreadId);
if (m_hThread)
printf("Thread lauched\n");
}
void ThreadObject::WaitForExit()
{
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);
}
//static member functions have no "this" pointer;
DWORD WINAPI ThreadObject::ThreadFunc(LPVOID param)
{
//Use the param as the address of the object
ThreadObject *pto = (ThreadObject*)param;
return pto->ThreadMemberFunc();
}
DWORD ThreadObject::ThreadMemberFunc()
{
//do something useful...
return 0;
}
void main()
{
ThreadObject obj;
obj.StartThread();
obj.WaitForExit();
}
0 0
- 由一个成员函数来启动一个线程
- 用匿名子类来启动一个线程
- tomcat启动之后,一个项目由两个线程启动的问题
- “屌丝”身世-由一个低级趣味而来
- 让对象只能由一个线程调用
- 由一个线程例子引发的思考
- 由一个activity启动第二个activity
- 一个线程函数模板
- 创建和启动一个线程
- MFC 中一个界面开启的线程函数如何访问另一个界面的成员
- 利用QT的QThread将一个类中的成员函数转到线程下执行
- 一个由模板函数引起的问题
- 一个由sscanf函数引起的bug
- 由一个函数引发的改进思考
- asp.net如何在事件中启动线程来打开一个页面
- tomcat启动时,自动启动一个线程
- 随TOMCAT启动 启动一个线程
- 用async声明一个函数,其实相当于是再声明一个线程。调用则启动了线程
- 动态生成随机验证码
- DM8127如何利用EDMA搬移数据
- Ubuntu 12.04 安装设置gcc4.4
- Android 程序框架设计
- HDU 1004 Let the Balloon Rise
- 由一个成员函数来启动一个线程
- 学习运维的日子
- Fragment详解之三——管理Fragment(1)
- 我最想知道这些东西对我有什么用?
- C++ RTMP直播流播放器
- angularJS最近总结一些零碎的知识点
- 黑马程序员--指针
- java类加载机制
- Fragment详解之四——管理Fragment(2)