我目前需要写这样一个类如下
class ThreadPool : public CWinThread//使用了继承线程
//里面要实现三个线程,临介区就不多讲了
//1扫描线程根据情况执行线程1或线程2
UINT ThreadPool::ScanOrder(LPVOID LParam)
...
while (ScanOpen){
临介区1开始
CWinThread SMSHandle=AfxBeginThread(&CreateLv1Thread,(long *)&OrderID);//问题一调用线程1出错,CreateLv1Thread这个线程地址怎样取.是不是要申明为静态
临介区1结束
}
}//2线程1
UINT ThreadPool::CreateLv1Thread(LPVOID lParam)
{...}
//3线程2
UINT ThreadPool::CreateLv2Thread(LPVOID lParam)
{...}
class ThreadPool : public CWinThread//使用了继承线程
//里面要实现三个线程,临介区就不多讲了
//1扫描线程根据情况执行线程1或线程2
UINT ThreadPool::ScanOrder(LPVOID LParam)
...
while (ScanOpen){
临介区1开始
CWinThread SMSHandle=AfxBeginThread(&CreateLv1Thread,(long *)&OrderID);//问题一调用线程1出错,CreateLv1Thread这个线程地址怎样取.是不是要申明为静态
临介区1结束
}
}//2线程1
UINT ThreadPool::CreateLv1Thread(LPVOID lParam)
{...}
//3线程2
UINT ThreadPool::CreateLv2Thread(LPVOID lParam)
{...}
请参考ATL的CThreadPool
首先这就是个绝对糟糕的设计
www.codeguru.com/cpp/w-p/system/threading/article.php/c10977
support.microsoft.com/kb/197728
数据传出来的方式会有很多种。
可以不同的线程共同拥有一个struct的指针,访问的时候看情况加锁。这个方式我比较喜欢,因为视不同情况对数据加read或者write锁,效率是最高的。
也可以建立一个消息机制,通过置位event和push pop来传递信息(类似windows消息机制或者直接采用windows消息机制)
=========那也不是理由用继承~
从代码重用性来说,继承的解决方案比较好
如果说你非要为了把ThreadPool和Thread区分开而重新写一个专用线程类,并不能算错,但是从我的角度上来看目的性不够明确。我不喜欢为了代码而写代码,呵呵。
但单从这贴本身来说,并不能说搂主的方式一定就是错的,对吗?
我会觉得很荒谬~
我的意思并不是说还需要写一个线程类,而是就使用现有的线程类就行了
因为ThreadPool的目的只是为了管理这些线程而已~
从面向对象的设计的角度来讲,如果必须使用继承才能解决问题,那就要使用继承.
否则, 还是尽量少用继承. 因此,站在这个角度来讲,fantiyu_sr()的说法还是很有道理.