引用第5楼dbzhang800于2010-08-21 07:29发表的 :
不妨先见简单一下你线程相关的这部分代码时怎么写的

#include <vector>
#include <map>
#include "Des.h"
#include "DesState.h"
#include "DesEvent.h"
#include <string>
#include <iostream>
#include <QMessageBox>
#include <sstream>
#include <set>
#include "ProductTransitionMap.h"
#include "TireStorage.h"
#include "PendingList.h"
#include <deque>
#include <qthread>
namespace DESpot
{
class modifiedSyn: public QThread
{
public:
public:
typedef std::map<std::wstring,short> GlobalEventMap;
typedef std::map<std::wstring,short>::iterator GlobalEventMapIt;
typedef std::map<short,std::wstring> ConEventSet;
typedef std::map<short,std::wstring>::iterator ConEventSetIt;
typedef std::vector<const Des*> DesSet;
typedef std::vector<const Des*> DesSetIt;
typedef std::set<int> MarkedStateSet;
typedef MarkedStateSet MarkedStateSetIt;
typedef std::vector<short> SrcStateTuple;
typedef std::deque<SrcStateTuple*> SourceStateList;
typedef std::deque<int> NonblockCheckList;
typedef std::set<int> BlockedStateList;
private:
short supindex;
DesSet &m_inDesSet;
short DesNum;
short EventNum;
short StateMaxNum;
short ***transitionMatrix;
private:
SourceStateList m_pendingList;
AlgoTrie *turpleStorage;
ProductTransitionMap *tranMap;
// new add
NonblockCheckList m_nonblocklist;
int nonblocknumber;
PendingList *m_pending;
public:
modifiedSyn(DesSet &in_DesSet):m_inDesSet(in_DesSet)
{
nonblocknumber=0;
}
~modifiedSyn()
{
if(tranMap!=null)
{
delete tranMap;
tranMap=null;
}
if(turpleStorage!=null)
{
delete turpleStorage;
turpleStorage=null;
}
if(m_pending!=null)
{
delete m_pending;
m_pending=null;
}
}
protected:
void loadProductDes() //--1
{
//load ProductTransitionMap
tranMap= new ProductTransitionMap (m_inDesSet);
DesNum=tranMap->getDesNum();
EventNum=tranMap->getEventNum();
StateMaxNum=tranMap->getStateMaxNum();
transitionMatrix=tranMap->getTransitionMatrix();
//load turpleStorage
turpleStorage=new AlgoTrie(m_inDesSet);
m_pending=new PendingList(DesNum);
}
void createInitialStateTuple(short in_desNum) //--2
{
SrcStateTuple tuple(in_desNum);
for(short i=0;i<in_desNum;i++)
{
const unsigned long long itmp=m_inDesSet
->getInitialState().getId().id();
unsigned long long tmp=itmp;
tuple=(short)tmp;
}
turpleStorage->insert(&tuple);
m_pending->PushPending(tuple);
}
void prerun()
{
loadProductDes();
createInitialStateTuple(DesNum);
}
public:
void run()
{
prerun();
//----------------------first phase, check and fill table---------------------------
while(!m_pending->isEmpty())
{
SrcStateTuple crtSrcStateTuple(DesNum);
m_pending->PopPending(crtSrcStateTuple);
for(short i=1;i<EventNum;i++)
{
SrcStateTuple temptuple(DesNum);
for(short j=0;j<DesNum;j++)
{
short from_state=crtSrcStateTuple[j];
short to_state=transitionMatrix[j][from_state];
if(to_state!=-1)
{
temptuple[j]=to_state;
}
else
{
break;
}
if(j==DesNum-1)
{ // at end of the entry; the whole tuple is finished
if(turpleStorage->search(&temptuple)==false)
{
turpleStorage->insert(&temptuple);
m_pending->PushPending(temptuple);
}
}
}
}
}
}
};
}
这个是 这个线程类的 代码 。 基本的思想就是一个
while() loop 然后做大概300万次的 计算 然后我再主程序中 这么调用的
modifiedSyn *han1=new modifiedSyn(m_inDesSet);
modifiedSyn *han2=new modifiedSyn(m_inDesSet);
han1->start();
han2->start();
han1->wait();
han2->wait();
delete han1;
delete han2;
throw EX("DONE");
时间 和 顺序运行的一模一样 感觉上就是完全没有在并行, 我其实 就是吧原来的这个运算类 继承了 QTHREAD 然后吧 运行部分 写进了 run 函数里面 然后调运 start 还有 wait