MFC C++ 中面向对象的多线程实现

参加了交通运输学院的一个交通科技大赛,需要与硬件沟通,当然也不是什么好高端的玩意儿,就是一个名为sick的一个德国产的激光扫描仪的使用,叫什么LMS-511;也就是基于TCP/IP通讯的罢了;主要是通过扫描仪发回来的数据把模型重新绘制出来;当然使用到了OpenGL来完成绘制的部分,不过个人觉得OpenGL本来就博大精深,自己皮毛都没有学到,就不在这里说啥子了;这里我们主要讨论怎么在MFC中通过面向对象的方式来使用多线程;

因为C++中的多线程要具体的有使用环境来决定,那么在MFC中就使用MFC的机制来使用的线程AfxBeginThread(FUNCTIONS,(void*));FUNCTIONS 为线程入口函数,后面的指针为传给线程的参数,因为在FUNCTINS 必须为静态函数(而且好像要为全局静态函数才行,试了几种方式,只有把线程函数写成类外部的函数才行),那么就把要使用线程的对象指针作为参数传入就可以了,并在线程函数里面调用对象的函数就相当于一个线程类了;该线程主要用于负责网络数据获取工作;可以看到该线程类中有一个空类型函数指针;由于该线程类是不确定要执行什么功能函数的在设计初期也不可能实现说有功能;并且这样写也更有面向对象的思想;那么在实例化该对象的时候也会传入一个静态函数指针;


直接代码表示吧:

RcvThread.h

#ifndef _RH_
#define _RH_
 #include"stdafx.h"
class RecvThread
{
	CWinThread* thread;
	int interval; 
	void (*func)(void);
public :
	RecvThread(void(*f)(void));
	void setInterval(int interval);
	void Start();
	void Wait();
	void Resume();
	void Stop(); 
	void run();
}; 
#endif
RcvThread.cpp

#pragma once
#include"stdafx.h"
#include"RecvThread.h"
UINT FUNCTIONS(LPVOID param){
	RecvThread *thread=(RecvThread*)param;
	thread->run();
	return 0;
}
RecvThread::RecvThread(void(*f)(void))
{
	func=f;
	if(f==NULL)return;
	interval=50;
	thread=NULL;
}
void RecvThread::setInterval(int interval)
{
	this->interval=interval;
}
void RecvThread::Start()
{
	thread=AfxBeginThread(FUNCTIONS,(void*)this);
}
void RecvThread::Wait()
{
	SuspendThread(thread->m_hThread);
}
void RecvThread::Resume()
{
	ResumeThread(thread->m_hThread );
}
void RecvThread::Stop()
{
	TerminateThread(thread->m_hThread,0);
}
 
void RecvThread::run()
{
	while(true)
	{
		Sleep(interval);
		(*func)();
	}
}
 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值