类中线程的使用

自己写了个例子,不知这种方式是否是常用方式,欢迎交流。

例子中所含有的点:

1、在类中函数创建线程,创建信号量。

2、在线程中调用类中函数。

3、线程检测信号量,来判断是否结束线程自身。

程序中包含一个类CTest,一个主函数main.cpp。

//Test.h
//2012.10.10   by l0g1n
#pragma once
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#include <iostream>
#include <string>
using namespace std;

class CTest
{
public:
	CTest(void);
	void ThreadCall();
	~CTest(void);
public:
	HANDLE m_hThread;
	HANDLE m_hEvent;
	int i;
};

//Test.cpp
//2012.10.10   by l0g1n
#include "Test.h"

void TestProc(PVOID lParam)
{
	cout<<"已进入线程函数"<<endl;
	CTest *p=(CTest*)lParam;
	while(1)
	{
		DWORD dwResult=WaitForSingleObject(p->m_hEvent,100);
		if(dwResult==WAIT_TIMEOUT)
			p->ThreadCall();
		else
			break;
	}
}

CTest::CTest(void)
{
	cout<<"已进入类中构造函数"<<endl;
	i=1;
	m_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
	m_hThread=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&TestProc,(LPVOID)this,0,NULL);//传递进去this指针,用于调用类中函数
	CloseHandle(m_hThread);
}

void CTest::ThreadCall()
{
	cout<<"线程函数调用类中函数成功    "<<i++<<"    输入q退出!"<<endl;
	Sleep(1000);
}

CTest::~CTest(void)
{
	cout<<"已进入类中析构函数"<<endl;
}

//main.cpp
//2012.10.10   by l0g1n
#include "Test.h"

int main()
{
	CTest test;
	string str;
	do
	{
		cin>>str;
	}while(str!="q");
	SetEvent(test.m_hEvent);
	system("pause");
	return 0;
}

程序当接收到q后,就会SetEvent,然后TestProc线程就会检测到,自动结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值