ACE学习(六)ACE_Condition

ACE_Condition

 

1.与POSIX下pthread_cond_wait()类似

 


/**
 * @class ACE_Condition
 *
 * @brief ACE_Condition variable wrapper, which allows threads to block
 * until shared data changes state.
 *
 * A condition variable enables threads to atomically block and
 * test the condition under the protection of a mutual exclu-
 * sion lock (mutex) until the condition is satisfied.  That is,
 * the mutex must have been held by the thread before calling
 * wait or signal on the condition.  If the condition is false,
 * a thread blocks on a condition variable and atomically
 * releases the mutex that is waiting for the condition to
 * change.  If another thread changes the condition, it may wake
 * up waiting threads by signaling the associated condition
 * variable.  The waiting threads, upon awakening, reacquire the
 * mutex and re-evaluate the condition.
 * Note, you can only parameterize <ACE_Condition> with
 * @a ACE_Thread_Mutex, @a ACE_Recursive_Thread_Mutex, or @a ACE_Null_Mutex.
 */

这个接口和POSIX下的pthread_cond_wait() 接口使用非常类似,都要与一个互斥锁一起配合使用,可以用来做线程池使用。没有找到ACE的实现代码,可能实现也使用了这个底层接口。

 

2.ACE_Condition_Thread_Mutex与ACE_Condition<ACE_Thread_Mutex> 作用一样,但类型不一样


使用ACE_Condition_Thread_Mutex定义的变量与ACE_Thread_Condition<Mutex>和ACE_Condition<ACE_Thread_Mutex>定义的变量都有共同的接口(类前面功能注释都一样),ACE_Thread_Condition继承自ACE_Condition。感觉有点乱,可能理解的不透彻,难道是为了达到一致性才这样设计的么。

 

3.使用Demo

 

// condition

#include "ace/Task.h"
#include "ace/Condition_T.h"

class HADeviceRespository
{
public:
	HADeviceRespository() : m_owner(0){}

	int isFree(void)
	{
		return (this->m_owner == 0);
	}

	int isOwner(ACE_Task_Base *tb)
	{
		return (this->m_owner == tb);
	}

	ACE_Task_Base *getOwner(void)
	{
		return this->m_owner;
	}

	void setOwner(ACE_Task_Base *owner)
	{
		this->m_owner = owner;
	}

	int updateDevice(int deviceId)
	{
		return 0;
	}
private:
	ACE_Task_Base *m_owner;
};

class HACommandHander : public ACE_Task_Base
{
public:
	enum {numUSES = 10};

	//HACommandHander(HADeviceRespository & rep, ACE_Condition<ACE_Thread_Mutex> & wait, ACE_Thread_Mutex * repMutex)
	HACommandHander(HADeviceRespository & rep, ACE_Condition_Thread_Mutex & wait, ACE_Thread_Mutex * repMutex)
		:m_rep(rep), m_wait(wait), m_repMutex(repMutex)
	{}

	virtual int svc (void)
	{
		for (int i=0; i<numUSES; i++)
		{
			ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%t) Hander Thread running\n")));
			ACE_OS::sleep(1);
			this->m_repMutex->acquire();
			while (!this->m_rep.isFree())
			{
				this->m_wait.wait();
			}
			this->m_rep.setOwner(this);
			this->m_repMutex->release();
			this->m_rep.updateDevice(i);

			ACE_ASSERT(this->m_rep.isOwner(this));
			this->m_rep.setOwner(0);

			this->m_wait.signal();
		}
		return 0;
	}
private:
	// we can only use ACE_Thread_Mutex *
	ACE_Thread_Mutex * m_repMutex;
	HADeviceRespository& m_rep;
	//ACE_Condition<ACE_Thread_Mutex>& m_wait;
	ACE_Condition_Thread_Mutex& m_wait;

};

int ACE_TMAIN(int, ACE_TCHAR *[])
{

	HADeviceRespository rep;
	ACE_Thread_Mutex repMutex;
	//ACE_Condition<ACE_Thread_Mutex> wait(repMutex);
	ACE_Condition_Thread_Mutex wait(repMutex);

	HACommandHander handler1 (rep, wait, &repMutex);
	HACommandHander handler2 (rep, wait, &repMutex);
	handler1.activate();
	handler2.activate();

	handler1.wait();
	handler2.wait();

	return 0;
}


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,我们可以得知WMIC是一种用于在Windows系统上执行WMI查询的命令行工具。在这里,`/every`是WMIC命令的一个选项,它用于显示所有可用的WMI别名和属性。 要使用`wmic /every`命令,请按照以下步骤操作: 1. 打开命令提示符。 2. 键入`wmic /every`并按Enter键。 3. 稍等片刻,系统将显示所有可用的WMI别名和属性。 以下是一个示例输出: ``` :\>wmic /every CLASS: Win32_1394Controller CLASS: Win32_1394ControllerDevice CLASS: Win32_Account CLASS: Win32_AccountSID CLASS: Win32_ACE CLASS: Win32_ActionCheck CLASS: Win32_AllocatedResource CLASS: Win32_ApplicationCommandLine CLASS: Win32_ApplicationService CLASS: Win32_AssociatedBattery CLASS: Win32_AssociatedProcessorMemory CLASS: Win32_BaseBoard CLASS: Win32_BaseService CLASS: Win32_Battery CLASS: Win32_Binary CLASS: Win32_BindImageAction CLASS: Win32_BIOS CLASS: Win32_BootConfiguration CLASS: Win32_Bus CLASS: Win32_CacheMemory CLASS: Win32_CDROMDrive CLASS: Win32_CheckCheck CLASS: Win32_CIMLogicalDeviceCIMDataFile CLASS: Win32_ClassicCOMApplicationClasses CLASS: Win32_ClassicCOMClass CLASS: Win32_ClassicCOMClassSetting CLASS: Win32_ClassicCOMClassSettings CLASS: Win32_ClassInfoAction CLASS: Win32_ClientApplicationSetting CLASS: Win32_CodecFile CLASS: Win32_COMApplication CLASS: Win32_COMApplicationClasses CLASS: Win32_COMApplicationSettings CLASS: Win32_COMClass CLASS: Win32_ComClassAutoEmulator CLASS: Win32_ComClassEmulator CLASS: Win32_CommandLineAccess CLASS: Win32_ComponentCategory CLASS: Win32_ComputerSystem CLASS: Win32_ComputerSystemProcessor CLASS: Win32_ComputerSystemProduct CLASS: Win32_COMSetting CLASS: Win32_Condition CLASS: Win32_ConnectionShare CLASS: Win32_ControllerHastHub CLASS: Win32_CreateFolderAction CLASS: Win32_CurrentProbe CLASS: Win32_DCOMApplication CLASS: Win32_DCOMApplicationAccessAllowedSetting CLASS: Win32_DCOMApplicationLaunchAllowedSetting CLASS: Win32_DCOMApplicationSetting CLASS: Win32_DependentService CLASS: Win32_Desktop CLASS: Win32_DesktopMonitor CLASS: Win32_DeviceBus CLASS: Win32_DeviceMemoryAddress CLASS: Win32_DeviceSettings CLASS: Win32_Directory CLASS: Win32_DirectorySpecification CLASS: Win32_DiskDrive CLASS: Win32_DiskDriveToDiskPartition CLASS: Win32_DiskPartition CLASS: Win32_DisplayConfiguration CLASS: Win32_DisplayControllerConfiguration CLASS: Win32_DMAChannel CLASS: Win32_DriverVXD CLASS: Win32_DuplicateFileAction CLASS: Win32_Environment CLASS: Win32_EnvironmentSpecification CLASS: Win32_ExtensionInfoAction CLASS: Win32_Fan CLASS: Win32_FileSpecification CLASS: Win32_FloppyController CLASS: Win32_FloppyDrive CLASS: Win32_FontInfoAction CLASS: Win32_Group CLASS: Win32_GroupUser CLASS: Win32_HeatPipe CLASS: Win32_IDEController CLASS: Win32_IDEControllerDevice CLASS: Win32_ImplementedCategory CLASS: Win32_InfraredDevice CLASS: Win32_IniFileSpecification CLASS: Win32_InstalledSoftwareElement CLASS: Win32_IRQResource CLASS: Win32_Keyboard CLASS: Win32_LaunchCondition CLASS: Win32_LoadOrderGroup CLASS: Win32_LoadOrderGroupServiceDependencies CLASS: Win32_LoadOrderGroupServiceMembers CLASS: Win32_LogicalDisk CLASS: Win32_LogicalDiskRootDirectory CLASS: Win32_LogicalDiskToPartition CLASS: Win32_LogicalFileAccess CLASS: Win32_LogicalFileAuditing CLASS: Win32_LogicalFileGroup CLASS: Win32_LogicalFileOwner CLASS: Win32_LogicalFileSecuritySetting CLASS: Win32_LogicalMemoryConfiguration CLASS: Win32_LogicalProgramGroup CLASS: Win32_LogicalProgramGroupDirectory CLASS: Win32_LogicalProgramGroupItem CLASS: Win32_LogicalProgramGroupItemDataFile CLASS: Win32_LogicalShareAccess CLASS: Win32_LogicalShareAuditing CLASS: Win32_LogicalShareSecuritySetting CLASS: Win32_ManagedSystemElementResource CLASS: Win32_MemoryArray CLASS: Win32_MemoryArrayLocation CLASS: Win32_MemoryDevice CLASS: Win32_MemoryDeviceArray CLASS: Win32_MemoryDeviceLocation CLASS: Win32_MethodParameterClass CLASS: Win32_MIMEInfoAction CLASS: Win32_MotherboardDevice CLASS: Win32_MoveFileAction CLASS: Win32_MSIResource CLASS: Win32_NamedJobObject CLASS: Win32_NamedJobObjectActgInfo CLASS: Win32_NamedJobObjectLimit CLASS: Win32_NamedJobObjectLimitSetting CLASS: Win32_NamedJobObjectProcess CLASS: Win32_NamedJobObjectSecLimit CLASS: Win32_NamedJobObjectSecLimitSetting CLASS: Win32_NamedJobObjectStatistics CLASS: Win32_NetworkAdapter CLASS: Win32_NetworkAdapterConfiguration CLASS: Win32_NetworkAdapterSetting CLASS: Win32_NetworkClient CLASS: Win32_NetworkConnection CLASS: Win32_NetworkLoginProfile CLASS: Win32_NetworkProtocol CLASS: Win32_NTEventlogFile CLASS: Win32_NTLogEvent CLASS: Win32_NTLogEventComputer CLASS: Win32_NTLogEventLog CLASS: Win32_NTLogEventUser CLASS: Win32_ODBCAttribute CLASS: Win32_ODBCDataSourceAttribute CLASS: Win32_ODBCDataSourceSpecification CLASS: Win32_ODBCDriverAttribute CLASS: Win32_ODBCDriverSoftwareElement CLASS: Win32_ODBCDriverSpecification CLASS: Win32_ODBCSourceAttribute CLASS: Win32_ODBCTranslatorSpecification CLASS: Win32_OnBoardDevice CLASS: Win32_OperatingSystem CLASS: Win32_OperatingSystemQFE CLASS: Win32_OSRecoveryConfiguration CLASS: Win32_PageFile CLASS: Win32_PageFileElementSetting CLASS: Win32_PageFileSetting CLASS: Win32_PageFileUsage CLASS: Win32_ParallelPort CLASS: Win32_Patch CLASS: Win32_PatchFile CLASS: Win32_PatchPackage CLASS: Win32_PCMCIAController CLASS: Win32_Perf CLASS: Win32_PerfRawData CLASS: Win32_PerfRawData_ASP_ActiveServerPages CLASS: Win32_PerfRawData_ASPNET_114322_ASPNETAppsv114322 CLASS: Win32_PerfRawData_ASPNET_114322_ASPNETv114322 CLASS: Win32_PerfRawData_ASPNET_ASPNET CLASS: Win32_PerfRawData_ASPNET_ASPNETApplications CLASS: Win32_PerfRawData_IAS_IASAccountingClients CLASS: Win32_PerfRawData_IAS_IASAccountingServer CLASS: Win32_PerfRawData_IAS_IASAuthenticationClients CLASS: Win32_PerfRawData_IAS_IASAuthenticationServer CLASS: Win32_PerfRawData_InetInfo_InternetInformationServicesGlobal CLASS: Win32_PerfRawData_MSDTC_DistributedTransactionCoordinator CLASS: Win32_PerfRawData_MSFTPSVC_FTPService CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerAccessMethods CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerBackupDevice CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerBufferManager CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerBufferPartition CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerCacheManager CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerLatches CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerLocks CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerMemoryManager CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationAgents CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationDist CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationLogreader CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationMerge CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationSnapshot CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerSQLStatistics CLASS: Win32_PerfRawData_MSSQLSERVER_SQLServerUserSettable CLASS: Win32_PerfRawData_NETFramework_NETCLRExceptions CLASS: Win32_PerfRawData_NETFramework_NETCLRInterop CLASS: Win32_PerfRawData_NETFramework_NETCLRJit CLASS: Win32_PerfRawData_NETFramework_NETCLRLoading CLASS: Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads CLASS: Win32_PerfRawData_NETFramework_NETCLRMemory CLASS: Win32_PerfRawData_NETFramework_NETCLRRemoting CLASS: Win32_PerfRawData_NETFramework_NETCLRSecurity CLASS: Win32_PerfRawData_Outlook_Outlook CLASS: Win32_PerfRawData_PerfDisk_PhysicalDisk CLASS: Win32_PerfRawData_PerfNet_Browser CLASS: Win32_PerfRawData_PerfNet_Redirector CLASS: Win32_PerfRawData_PerfNet_Server CLASS: Win32_PerfRawData_PerfNet_ServerWorkQueues CLASS: Win32_PerfRawData_PerfOS_Cache CLASS: Win32_PerfRawData_PerfOS_Memory CLASS: Win32_PerfRawData_PerfOS_Objects CLASS: Win32_PerfRawData_PerfOS_PagingFile CLASS: Win32_PerfRawData_PerfOS_Processor CLASS: Win32_PerfRawData_PerfOS_System CLASS: Win32_PerfRawData_PerfProc_FullImage_Costly CLASS: Win32_PerfRawData_PerfProc_Image_Costly CLASS: Win32_PerfRawData_PerfProc_JobObject CLASS: Win32_PerfRawData_PerfProc_JobObjectDetails CLASS: Win32_PerfRawData_PerfProc_Process CLASS: Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly CLASS: Win32_PerfRawData_PerfProc_Thread CLASS: Win32_PerfRawData_PerfProc_ThreadDetails_Costly CLASS: Win32_PerfRawData_RemoteAccess_RASPort CLASS: Win32_PerfRawData_RemoteAccess_RASTotal CLASS: Win32_PerfRawData_RSVP_ACSPerRSVPService CLASS: Win32_PerfRawData_Spooler_PrintQueue CLASS: Win32_PerfRawData_TapiSrv_Telephony CLASS: Win32_PerfRawData_Tcpip_ICMP CLASS: Win32_PerfRawData_Tcpip_IP CLASS: Win32_PerfRawData_Tcpip_NBTConnection CLASS: Win32_PerfRawData_Tcpip_NetworkInterface CLASS: Win32_PerfRawData_Tcpip_TCP CLASS: Win32_PerfRawData_Tcpip_UDP CLASS: Win32_PerfRawData_TermService_TerminalServices CLASS: Win32_PerfRawData_TermService_TerminalServicesSession CLASS: Win32_PerfRawData_W3SVC_WebService CLASS: Win32_PhysicalMedia CLASS: Win32_PhysicalMemory CLASS: Win32_PhysicalMemoryArray CLASS: Win32_PhysicalMemoryLocation CLASS: Win32_PNPAllocatedResource CLASS: Win32_PnPDevice CLASS: Win32_PnPEntity CLASS: Win32_PointingDevice CLASS: Win32_PortableBattery CLASS: Win32_PortConnector CLASS: Win32_PortResource CLASS: Win32_POTSModem CLASS: Win32_POTSModemToSerialPort CLASS: Win32_PowerManagementEvent CLASS: Win32_Printer CLASS: Win32_PrinterConfiguration CLASS: Win32_PrinterController CLASS: Win32_PrinterDriverDll CLASS: Win32_PrinterSetting CLASS: Win32_PrinterShare CLASS: Win32_PrintJob CLASS: Win32_PrivilegesStatus CLASS: Win32_Process CLASS: Win32_Processor CLASS: Win32_ProcessStartup CLASS: Win32_Product CLASS: Win32_ProductCheck CLASS: Win32_ProductResource CLASS: Win32_ProductSoftwareFeatures CLASS: Win32_ProgIDSpecification CLASS: Win32_ProgramGroup CLASS: Win32_ProgramGroupContents CLASS: Win32_ProgramGroupOrItem CLASS: Win32_Property CLASS: Win32_ProtocolBinding CLASS: Win32_PublishComponentAction CLASS: Win32_QuickFixEngineering CLASS: Win32_Refrigeration CLASS: Win32_Registry CLASS: Win32_RegistryAction CLASS: Win32_RemoveFileAction CLASS: Win32_RemoveIniAction CLASS: Win32_ReserveCost CLASS: Win32_ScheduledJob CLASS: Win32_SCSIController CLASS: Win32_SCSIControllerDevice CLASS: Win32_SecurityDescriptor CLASS: Win32_SecuritySetting CLASS: Win32_SecuritySettingAccess CLASS: Win32_SecuritySettingAuditing CLASS: Win32_SecuritySettingGroup CLASS: Win32_SecuritySettingOfLogicalFile CLASS: Win32_SecuritySettingOfLogicalShare CLASS: Win32_SecuritySettingOfObject CLASS: Win32_SecuritySettingOwner CLASS: Win32_SelfRegModuleAction CLASS: Win32_SerialPort CLASS: Win32_SerialPortConfiguration CLASS: Win32_SerialPortSetting CLASS: Win32

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值