首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

急求ACE

2012-03-06 
急求ACE高手指点C/C++ codeinclude stdafx.h#include cstdlib#include vector#include algorithm#

急求ACE高手指点

C/C++ code
include "stdafx.h"#include <cstdlib>#include <vector>#include <algorithm>#include <iostream>#include <stdlib.h>#include "ace/Task.h"#include "ace/Semaphore.h"using namespace std;class DataCheckSetMoiData : public ACE_Task_Base{public:    DataCheckSetMoiData(        ACE_Semaphore& psema,        ACE_Semaphore& csema,        std::list<int>& moiList,        );    virtual int svc(void);private:    std::list<int>& moiList_;    ACE_Semaphore& psema_;    ACE_Semaphore& csema_;};int DataCheckSetMoiData::svc(){    for (int i =0 ; i< 8; i++)    {        psema_.acquire();        moiList_.push_back(i);        csema_.release();    }    return 0;}class DataCheckGetMoiData : public ACE_Task_Base{public:    DataCheckGetMoiData(        ACE_Semaphore& psema,        ACE_Semaphore& csema,        std::list<int>& moiList,        );    virtual int svc(void);private:    std::list<int>& moiList_;    ACE_Semaphore& psema_;    ACE_Semaphore& csema_;};int DataCheckGetMoiData::svc(){    csema_.acquire();    int j = moiList_.front();    moiList_.pop_front();    psema_.release();    cout<<j<<endl;        return 0;}int _tmain(int argc, _TCHAR* argv[]){    ACE_Semaphore psema(4);    ACE_Semaphore csema(0);    std::list<int> moiList;    DataCheckSetMoiData * data = new DataCheckSetMoiData(psema, csema, moiList);    data->activate();        DataCheckGetMoiData* getdata = new DataCheckGetMoiData(psema, csema, moiList);    getdata->activate();    data->wait();    getdata->wait();    system("pause");        return 0;    }


怎么结果只输出个1 啊

[解决办法]
int DataCheckGetMoiData::svc()
{
csema_.acquire();
int j = moiList_.front();
moiList_.pop_front();
psema_.release();
cout<<j<<endl;
return 0;
}


这个线程函数怎么不循环?

还有信号量要是全局的,才能锁住线程啊
[解决办法]
这个你既然是用ACE_TASK,里面就用ACE_Message_Queque来实现的
SVC是开辟的线程,在里面用qetq(mb),

在主线程中可以用putq(mb),
然后在需要退出的时候由主线程发一个消息就可以

[解决办法]
C/C++ code
    for (int i = 0; i < 8; i++)    {        csema_.acquire();        int j = moiList_.front();        moiList_.pop_front();        cout<<j<<endl;               psema_.release();    } 

热点排行