亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? privopc.h

?? 一個OPC服務器開發的源代碼。結構清晰
?? H
?? 第 1 頁 / 共 2 頁
字號:
/**************************************************************************
 *                                                                        *
 * Light OPC Server development library                                   *
 *                                                                        *
 *   Copyright (c) 2000  Timofei Bondarenko, Kostya Volovich              *
 **************************************************************************/

#ifndef PRIVOPC_H
#define PRIVOPC_H

/**************************************************************************
 TODO:
 It would be better to sort groups by UpdateRate.

 advise_enabled can be eliminated***
 GetEnable() SetEnable() can modify advise_present because
   they are not work if connection was not advised.
   but how we'll find connections for explicit Refresh/Read/Write ?

 make locking for Activate/Deactivate less extensive

 it's better to compute deadband using Requested datatypes

 include TagAlias as reduced RealTag

 CacheRead from PrimaryCache vs Per-Item-Cache? less locks/more updates.

 **************************************************************************
  IMPORTANT:
            Order of the locks. When more than 1 lock should be locked
            they must be locked in this order!
            Otherwise deadlocks can occure.

loService::lkList
loClient::async.lk
loClient::lk_remove
loClient::lk_all
loService::lkDr

loClient::lk_browse
loService::lkMgmt
loService::update_pipe.lk
loService::lkPrim

 **************************************************************************
 Internal declarations:
 **************************************************************************/

#include <opcda.h>	/* The OPC custom interface defintions */
#include <opccomn.h>

#ifndef OPTIONS_H
#include "options.h"
#endif

#ifndef LIGHTOPC_H
#include "lightopc.h"
#endif
#ifndef LOSERV_H
#include "loserv.h"
#endif
#ifndef REQQUEUE_H
#include "reqqueue.h"
#endif
#ifndef UTIL_H
#include "util.h"
#endif
#ifndef GROWLIST_H
#include "growlist.h"
#endif
#ifndef OBJTRACK_H
#include "objtrack.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif

/**************************************************************************/
#ifdef __cplusplus
	}
//#endif see at the EOF
#include "connpnt.h"

class LightOPCServer;
class LightOPCGroup;
class LightOPCItem;

/*#define LightOPCServer loClient
 It's right: server will be created on each client connection.
   Thus, from driver point of view LightOPCServer is assotiated with a client */

#define CLINAME_FMT   "%.16s "
#define LOG_SR(fmt)   LOGID, CLINAME_FMT fmt, client_name
#define LOG_GR(fmt)   LOGID, CLINAME_FMT fmt, owner->client_name
#define LOG_GRO(fmt)  LOGID, CLINAME_FMT fmt, (iam_attached()? owner->client_name: "?")
#define LOG_GRH(fmt)  LOGID, CLINAME_FMT "%u:" fmt, owner->client_name, ServerHandle
#define LOG_GRHO(fmt) LOGID, CLINAME_FMT "%u:" fmt, (iam_attached()? owner->client_name: "?"), ServerHandle

#define LOG_SR1(fmt,first)   LOGID, CLINAME_FMT fmt, first, client_name
#define LOG_GR1(fmt,first)   LOGID, CLINAME_FMT fmt, first, owner->client_name

#if LO_USE_OBJXREF
struct loObjXref
  {
inline  loObjXref() { InterlockedIncrement(&lo_X_objcount); }
inline ~loObjXref() { InterlockedDecrement(&lo_X_objcount); }
  };
#define LO_OBJ_XREF  loObjXref xxx_ref
#else
#define LO_OBJ_XREF
#endif

#define loUNIQUE_LEN (32)

#define LO_CHECK_STATE_(string) if (lock_state(string)) return LO_E_SHUTDOWN; else {

#define LO_CHECK_STATEz0(string) LO_CHECK_STATE_(string)
#define LO_CHECK_STATEz1(string,a1)          if (a1) *(a1) = 0; LO_CHECK_STATEz0(string)
#define LO_CHECK_STATEz2(string,a1,a2)       if (a2) *(a2) = 0; LO_CHECK_STATEz1(string,a1)
#define LO_CHECK_STATEz3(string,a1,a2,a3)    if (a3) *(a3) = 0; LO_CHECK_STATEz2(string,a1,a2)
#define LO_CHECK_STATEz4(string,a1,a2,a3,a4) if (a4) *(a4) = 0; LO_CHECK_STATEz3(string,a1,a2,a3)

#define LO_FINISH()  unlock_state(); }

typedef struct
  {
   IOPCShutdown *request;
   loWchar      *reason;
  } loShutdownConn;

void loShutdownConn_init(loShutdownConn *);

void loShutdownConn_clear(loShutdownConn *);
void loShutdownConn_call(loShutdownConn *);

#define loShutdownConn_init(p) (memset((p), 0, sizeof(loShutdownConn)))

class LightOPCServer : public IOPCServer,
                       public IOPCCommon,
                       public IOPCBrowseServerAddressSpace,
                       public IOPCItemProperties,
                       public loConnPnt1 /*public IConnectionPointContainer,*/
{
     LO_OBJ_XREF;
public:
     unsigned long initphase;
     glGrowingList grl;
     loService *se;
     LightOPCServer *serv_next;
     loCallerx ctxt;

     unsigned serv_key;
     int ldFlags;
     short access_mode;
     HRESULT (*qi_chain)(void *rha, loService *, loClient *,
                         const IID *, LPVOID *);

     loThrControl async; /* On signaling the tasync.state should be = 1
                            2 forces client_scheduler() to call selfdestroy() */
inline void touch_scheduler(void)
            {
             if (0 == async.tstate)
               {
                lw_mutex_lock(&async.lk);
                if (0 == async.tstate) async.tstate = 1;
                lw_conds_signal(&async.cond);
                lw_mutex_unlock(&async.lk);
               }
            }
/* This additional flag is requered for proper hanling of late events
   which has occured in the middle of client_scheduler() loop.
   Such signals will cause zero-time sleep and will be handled on the
   next iteration. */
#if LO_USE_BOTHMODEL
     char ole_initialized;
#endif
     int  shuttingdown; /* locked by async.lk */
     loObjTracker otrk;   /* & otrk.ot_stopped - flags for lock_state() */
     loQueueAsync q_req;
     loQueueBcast q_ret;

     loShutdownConn shutdown_conn; /* locked by async.lk */

     HRESULT  sync_advise(int operation, void **arg, loRqid grp_key);
     HRESULT async_advise(int conn, const IID *iface,
                          LightOPCGroup *grp, unsigned grp_key,
                          IUnknown *pUnk);
inline HRESULT async_unadvise(int conn, const IID *iface,
                              LightOPCGroup *grp, unsigned grp_key)
        { return async_advise(conn, iface, grp, grp_key, 0); }

     /* [un]lock_state() must NOT be virtual ! */
     int lock_state(const char *msg, const IID *riid_nostrict = 0);
                 /* returns 0 if Ok or -1 if out of service */
inline ULONG unlock_state(void)
  { UL_DEBUG((LOG_SR("unlock_state() -> finished: va=%d st=%d sd=%d rc=%d"),      
      loIS_VALID(this), otrk.ot_stopped, shuttingdown, RefCount));
    return Release();}

     void set_state(int oper, int state, const loWchar *reason);
     void client_scheduler(void);

     lw_rwlock lk_remove;
     lw_rwlock lk_all;
#if LO_USE_BOTHMODEL
     int (*lml_rd_lock)(lw_rwlock *lk, DWORD timeout);
     int (*lml_wr_lock)(lw_rwlock *lk, DWORD timeout);
     inline void lock_read(void)   { lml_rd_lock(&lk_all, INFINITE); }
     inline void lock_write(void)  { lml_wr_lock(&lk_all, INFINITE); }
     inline int RD_lock(lw_rwlock *rw)  { return lml_rd_lock(rw, INFINITE); }
     inline int WR_lock(lw_rwlock *rw)  { return lml_wr_lock(rw, INFINITE); }
#else
     inline int RD_lock(lw_rwlock *rw)  { return lw_rw_rdlock(rw); }
     inline int WR_lock(lw_rwlock *rw)  { return lw_rw_wrlock(rw); }
     inline void lock_read(void)
         {
//          UL_DEBUG((LOGID, "RdLock..."));
          lw_rw_rdlock(&lk_all);
  //      UL_DEBUG((LOGID, "...RdLock"));
         }
     inline void lock_write(void)
         {
    //      UL_DEBUG((LOGID, "WrLock..."));
          lw_rw_wrlock(&lk_all);
      //  UL_DEBUG((LOGID, "...WrLock"));
         }
#endif
     inline void unlock(void)
         {
        //  UL_DEBUG((LOGID, "UnLock..."));
          lw_rw_unlock(&lk_all);
          //UL_DEBUG((LOGID, "...UnLock"));
         }

     loStringBuf browsepos;
     lw_mutex    lk_browse;
inline void lock_browse(void)   { lw_mutex_lock(&lk_browse); }
inline void unlock_browse(void) { lw_mutex_unlock(&lk_browse); }

HRESULT set_browsepos(const loWchar *pos, int len = -1);
    int cat_browsepos(const loWchar *cpos);

     void (*release_handle)(void *, loService *, loClient *);
     void  *release_handle_arg;

     OPCSERVERSTATUS ostatus;
     loMilliSec bandwidth_time;

     unsigned long unique_GroupName;
     OPCHANDLE unique_GroupHandle;
     HRESULT mk_unique(loWchar buf[loUNIQUE_LEN], const void *ptr);

     LightOPCServer();
virtual ~LightOPCServer();
     int initialize(loService *serv, int ld_flags, const loVendorInfo *vi);
     void selfdestroy(void);

     int attach(void); /* set the owner */
     int detach(void); /* should set ready = 0 and do some cleanup */

     void clear_all(void);
     LightOPCGroup *by_name(const loWchar *name);
     unsigned by_handle(OPCHANDLE sgh);
     LightOPCGroup *by_handle_g(unsigned sgh);
     void del_all(int force = 0);
	/* returns -1 on errors or ==0/!=0 depend on item's Release() */
     int del(unsigned index, int force = 0);
     unsigned add(LightOPCGroup *grp);

/* IUnknown implementation */
     LONG RefCount;
     STDMETHOD_ (ULONG, AddRef)(void);
     STDMETHOD_ (ULONG, Release)(void);
     STDMETHOD (QueryInterface) (REFIID riid, void **ppv);

/* IOPCCommon implementation */
     char client_name[64]; /* no pointers - no locks */

	 STDMETHOD (SetLocaleID) (LCID dwLcid);
	 STDMETHOD (GetLocaleID) (LCID *dwLcid);
	 STDMETHOD (QueryAvailableLocaleIDs) (DWORD* pdwCount, LCID** pdwLcid);
     STDMETHOD (GetErrorString)(LONG dwError, LPWSTR *ppString);
	 STDMETHOD (SetClientName) (LPCWSTR szClientName);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩久久久一区| zzijzzij亚洲日本少妇熟睡| 666欧美在线视频| 蜜桃视频在线观看一区二区| 日韩三级免费观看| 国产成人亚洲综合a∨婷婷 | 美女视频黄频大全不卡视频在线播放| 91精品国产福利在线观看| 精品亚洲免费视频| 中文字幕在线免费不卡| 91黄色免费网站| 免费久久精品视频| 亚洲国产成人午夜在线一区| 91免费精品国自产拍在线不卡| 午夜精品久久一牛影视| 26uuu国产电影一区二区| 99久久99久久综合| 亚洲成人av中文| 久久精品一区四区| 欧美熟乱第一页| 国产精品1区2区3区在线观看| 亚洲欧美日韩在线| 精品国一区二区三区| 91在线观看成人| 久久国产精品第一页| 亚洲乱码国产乱码精品精的特点| 欧美一区二区福利在线| av一区二区三区| 精品在线免费观看| 一区二区三区加勒比av| 久久久久97国产精华液好用吗| 欧洲亚洲国产日韩| 国产成人精品亚洲777人妖| 午夜精品一区在线观看| 一区在线观看免费| 欧美白人最猛性xxxxx69交| 色综合天天综合给合国产| 九色porny丨国产精品| 亚洲精品国产第一综合99久久| 精品国产一区二区在线观看| 在线观看日韩av先锋影音电影院| 国产激情一区二区三区四区 | 日韩av电影免费观看高清完整版| 中文在线免费一区三区高中清不卡| 欧美三级日韩三级| 不卡高清视频专区| 国内欧美视频一区二区| 日韩有码一区二区三区| 一区二区三区影院| 国产精品水嫩水嫩| 国产午夜精品久久久久久免费视 | 亚洲香蕉伊在人在线观| 国产精品久久久久久亚洲毛片| 精品久久久久一区二区国产| 欧美高清性hdvideosex| 欧美性大战久久久久久久| av在线免费不卡| 波多野结衣亚洲| 国产成人一级电影| 激情综合网av| 久久99精品久久久久久国产越南| 日韩有码一区二区三区| 亚洲v中文字幕| 亚洲一区二区在线免费观看视频| 椎名由奈av一区二区三区| 国产精品美女久久久久久久久久久| 久久久久97国产精华液好用吗| 欧美r级在线观看| 精品国产乱码久久久久久免费| 欧美电影免费观看完整版| 欧美电视剧免费观看| 日韩欧美你懂的| 亚洲精品在线观看视频| 精品久久久久久久一区二区蜜臀| 欧美刺激午夜性久久久久久久| 日韩欧美二区三区| 久久久亚洲精品一区二区三区| 久久久综合精品| 国产日产精品1区| 国产精品第13页| 亚洲精品国产无天堂网2021| 亚洲一区二区高清| 日本美女一区二区| 韩国女主播一区二区三区| 国产成人精品免费视频网站| www.性欧美| 欧美亚洲综合一区| 欧美一区二区三区精品| 精品对白一区国产伦| 国产精品理论片| 亚洲国产精品久久不卡毛片 | 韩国午夜理伦三级不卡影院| 国产成人在线观看| 色94色欧美sute亚洲13| 欧美老肥妇做.爰bbww视频| 欧美一级在线免费| 欧美国产97人人爽人人喊| 亚洲黄色免费电影| 美国三级日本三级久久99| 成人免费精品视频| 欧美日韩在线播放三区| 久久综合五月天婷婷伊人| 中文字幕精品在线不卡| 亚洲综合免费观看高清完整版| 五月天亚洲精品| 国产精品一区二区三区四区| 日本韩国一区二区| 精品国内二区三区| 亚洲永久精品国产| 精品一区二区三区在线观看国产 | 欧美日韩第一区日日骚| 精品国产一区二区亚洲人成毛片| ...av二区三区久久精品| 日韩中文字幕91| av电影一区二区| 欧美一区二区三区系列电影| 欧美国产1区2区| 免费欧美在线视频| 91免费版在线| 久久先锋影音av| 亚洲韩国精品一区| 国产成人啪午夜精品网站男同| 欧美调教femdomvk| 国产农村妇女精品| 琪琪久久久久日韩精品| 一本大道久久a久久精品综合| 精品剧情在线观看| 亚洲aⅴ怡春院| 波多野结衣一区二区三区| 精品少妇一区二区三区免费观看| 亚洲精品精品亚洲| 成人性生交大片免费看视频在线 | 亚洲精品一区二区三区四区高清| 亚洲精品免费电影| 成人精品视频一区二区三区 | 国产精品理论在线观看| 精品写真视频在线观看| 欧美精品在线一区二区| 一区二区三区鲁丝不卡| 波多野结衣视频一区| 久久精品欧美日韩| 青青草国产成人av片免费| 精品视频在线看| 亚洲欧美国产毛片在线| 国产精品一级二级三级| 欧美成人三级在线| 天堂一区二区在线免费观看| 欧美影院一区二区三区| 免费高清在线一区| 欧美性做爰猛烈叫床潮| 亚洲人精品午夜| 91亚洲精品一区二区乱码| 国产欧美一区二区三区网站 | 欧美在线一区二区三区| 久久毛片高清国产| 久久国产精品露脸对白| 欧美久久免费观看| 午夜视频久久久久久| 欧美日韩国产综合草草| 亚洲影视在线播放| 欧美日韩精品久久久| 国产高清亚洲一区| 26uuu欧美| 国产精品88888| 国产亚洲精品中文字幕| 国产精品456| 国产精品色眯眯| aaa国产一区| 一区二区三区在线免费视频| 在线免费不卡视频| 天天综合色天天综合| 日韩欧美你懂的| 国产成人在线视频免费播放| 国产欧美一区二区精品久导航 | 欧美成人艳星乳罩| 狠狠色丁香久久婷婷综合丁香| 久久久国产午夜精品| 成人伦理片在线| 一区二区视频免费在线观看| 欧美日韩一区不卡| 免费观看91视频大全| 久久精品人人做人人爽人人| 国产成人av一区二区三区在线观看| 欧美国产成人精品| 色94色欧美sute亚洲线路二 | 国产精品久久久一本精品 | 欧美精品一卡两卡| 韩国av一区二区三区| 中文字幕一区二区三区四区不卡| 在线免费观看日本欧美| 久久er精品视频| 日韩理论在线观看| 欧美精品欧美精品系列| 国产精品一二三四区| 亚洲男人天堂一区| 欧美成人一区二区| 色素色在线综合| 另类的小说在线视频另类成人小视频在线| 国产人伦精品一区二区| 欧美性高清videossexo|