自己写了个例子,不知这种方式是否是常用方式,欢迎交流。
例子中所含有的点:
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线程就会检测到,自动结束。