|
|

楼主 |
发表于 2005-6-20 17:09:00
|
显示全部楼层
Re: Re:菜鸟请教关于可能多线程编译选项错误引起的程序
tarkey: Re:菜鸟请教关于可能多线程编译选项错误引起的程序非法
...ace还比较熟,wxWidgets就不熟了。。-。-
头文件
#ifndef _MYTASK_H_
#define _MYTASK_H_
#include "ace/Service_Config.h"
#include "ace/streams.h"
#include "ace/Synch.h"
#include "ace/Task.h"
#include "ace/Thread_Manager.h"
#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Connector.h"
#include "ace/SOCK_Acceptor.h"
#include "ace/OS_NS_sys_select.h"
#include "ace/Handle_Set.h"
class MyTask : public ACE_Task<ACE_MT_SYNCH>
{
private:
int m_nPort;
char m_SrvName[64];
public:
MyTask();
virtual ~MyTask();
int svc ();
bool Start();
void Stop();
bool Initialise(unsigned int port, const char* pIPAddress);
};
#endif //_MYTASK_H_
CPP文件
#include "MyTask.h"
MyTask::MyTask()
{
m_nPort = 0;
m_SrvName[0] = 0;
}
MyTask::~MyTask()
{
}
bool MyTask::Start()
{
this->activate();//就是这里。linux没有问题,windows马上就挂了
return true;
}
void MyTask::Stop()
{
ACE_Thread_Manager::instance()->cancel_task(this);
wait();
}
bool MyTask::Initialise(unsigned int port, const char* pIPAddress)
{
m_nPort = port;
strncpy(m_SrvName, pIPAddress, 64);
return true;
}
int MyTask::svc ()
{
// Connect Server
// if Connect OK
// ....
// else
// ....return
// for(;;)
ACE_NOTREACHED (return 0);
}
调用方式
m_pMyTask = new MyTask;
if(m_pMyTask == NULL
|| m_pMyTask->Initialise(3724, "127.0.0.1") == false
|| m_pMyTask->Start() == false)
{
delete m_pMyTask;
m_pMyTask=NULL;
}
这样有问题吗? |
|