nmzqzw 发表于 2008-6-3 15:14:53

Singleton::close阻塞问题

typedef ACE_Unmanaged_Singleton<MyClass, ACE_Recursive_Thread_Mutex >   _singleton;

在程序退出时调用_singleton::close()结果阻塞在这个方法上了,请问各位,这是什么原因呢?

winston 发表于 2008-6-3 16:21:05

要看一下代码了,贴上相关的代码看看。

_coco 发表于 2008-7-31 19:45:12

我在使用ACE_Unmanaged_Singleton的时候,释放资源调用ACE_Unmanaged_Singleton::close(),编译器却提示:
1>Compiling...
1>rebuild_thread.cpp
1>.\src\rebuild_thread.cpp(250) : error C2039: 'closesocket' : is not a member of 'ACE_Unmanaged_Singleton'
1>      with
1>      [
1>            TYPE=RebuildThread,
1>            ACE_LOCK=ACE_Thread_Mutex
1>      ]
1>.\src\rebuild_thread.cpp(250) : error C2660: 'closesocket' : function does not take 0 arguments

RebuildThread类的定义如下:

class RebuildThread : public ACE_Task
{
public:
      RebuildThread()      {}
      ~RebuildThread()      {}

      virtual int svc();

      int                ProcessPacketFromFile( const char *filename );

      static void                ReconPacket( DumpFile &dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data );

      void unbindNonActiveHash();

      static void fini();

private:
      ACE_Thread_Mutex mutex_;
};

typedef ACE_Unmanaged_Singleton REBUILD_THREAD;

其中REBUILD_THREAD::close()是在fini()函数中调用的,请问这是什么原因呢? :(

winston 发表于 2008-7-31 22:29:08

'closesocket' : is not a member of 'ACE_Unmanaged_Singleton'
代码写错了。closesocket是API,和'ACE_Unmanaged_Singleton'无关。

_coco 发表于 2008-8-1 09:39:12

原帖由 winston 于 2008-7-31 22:29 发表 http://www.acejoy.com/bbs/images/common/back.gif
'closesocket' : is not a member of 'ACE_Unmanaged_Singleton'
代码写错了。closesocket是API,和'ACE_Unmanaged_Singleton'无关。


嗯,这个我知道,但是我调用的是ACE_Unmanaged_Singleton::close(),编译器为什么提示这样的错误呢?

_coco 发表于 2008-8-1 11:28:32

搞定了,是因为项目中还用了 libnet 库,而libnet.h这个头文件中有如下的宏定义:

/* Some UNIX to Win32 conversions */
#define STDOUT_FILENO stdout
#define snprintf _snprintf
#define write _write
#define open _open
#define random rand
#define close closesocket
#define __func__ __FUNCTION__

所以就导致了如上的编译错误。
页: [1]
查看完整版本: Singleton::close阻塞问题