ホーム › System.DistributedTransactionCoordinator › XACTSTATS
XACTSTATS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cOpen | DWORD | 4 | +0 | +0 | 現在オープン中のトランザクション数。 |
| cCommitting | DWORD | 4 | +4 | +4 | コミット処理中のトランザクション数。 |
| cCommitted | DWORD | 4 | +8 | +8 | コミット完了したトランザクション数。 |
| cAborting | DWORD | 4 | +12 | +12 | アボート処理中のトランザクション数。 |
| cAborted | DWORD | 4 | +16 | +16 | アボートされたトランザクション数。 |
| cInDoubt | DWORD | 4 | +20 | +20 | 結果不確定(in-doubt)のトランザクション数。 |
| cHeuristicDecision | DWORD | 4 | +24 | +24 | ヒューリスティック判定されたトランザクション数。 |
| timeTransactionsUp | FILETIME | 8 | +28 | +28 | トランザクション統計の起点時刻(FILETIME)。 |
各言語での定義
#include <windows.h>
// FILETIME (x64 8 / x86 8 バイト)
typedef struct FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
// XACTSTATS (x64 36 / x86 36 バイト)
typedef struct XACTSTATS {
DWORD cOpen;
DWORD cCommitting;
DWORD cCommitted;
DWORD cAborting;
DWORD cAborted;
DWORD cInDoubt;
DWORD cHeuristicDecision;
FILETIME timeTransactionsUp;
} XACTSTATS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
public uint dwLowDateTime;
public uint dwHighDateTime;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct XACTSTATS
{
public uint cOpen;
public uint cCommitting;
public uint cCommitted;
public uint cAborting;
public uint cAborted;
public uint cInDoubt;
public uint cHeuristicDecision;
public FILETIME timeTransactionsUp;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
Public dwLowDateTime As UInteger
Public dwHighDateTime As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure XACTSTATS
Public cOpen As UInteger
Public cCommitting As UInteger
Public cCommitted As UInteger
Public cAborting As UInteger
Public cAborted As UInteger
Public cInDoubt As UInteger
Public cHeuristicDecision As UInteger
Public timeTransactionsUp As FILETIME
End Structureimport ctypes
from ctypes import wintypes
class FILETIME(ctypes.Structure):
_fields_ = [
("dwLowDateTime", wintypes.DWORD),
("dwHighDateTime", wintypes.DWORD),
]
class XACTSTATS(ctypes.Structure):
_fields_ = [
("cOpen", wintypes.DWORD),
("cCommitting", wintypes.DWORD),
("cCommitted", wintypes.DWORD),
("cAborting", wintypes.DWORD),
("cAborted", wintypes.DWORD),
("cInDoubt", wintypes.DWORD),
("cHeuristicDecision", wintypes.DWORD),
("timeTransactionsUp", FILETIME),
]#[repr(C)]
pub struct FILETIME {
pub dwLowDateTime: u32,
pub dwHighDateTime: u32,
}
#[repr(C)]
pub struct XACTSTATS {
pub cOpen: u32,
pub cCommitting: u32,
pub cCommitted: u32,
pub cAborting: u32,
pub cAborted: u32,
pub cInDoubt: u32,
pub cHeuristicDecision: u32,
pub timeTransactionsUp: FILETIME,
}import "golang.org/x/sys/windows"
type FILETIME struct {
dwLowDateTime uint32
dwHighDateTime uint32
}
type XACTSTATS struct {
cOpen uint32
cCommitting uint32
cCommitted uint32
cAborting uint32
cAborted uint32
cInDoubt uint32
cHeuristicDecision uint32
timeTransactionsUp FILETIME
}type
FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
XACTSTATS = record
cOpen: DWORD;
cCommitting: DWORD;
cCommitted: DWORD;
cAborting: DWORD;
cAborted: DWORD;
cInDoubt: DWORD;
cHeuristicDecision: DWORD;
timeTransactionsUp: FILETIME;
end;const FILETIME = extern struct {
dwLowDateTime: u32,
dwHighDateTime: u32,
};
const XACTSTATS = extern struct {
cOpen: u32,
cCommitting: u32,
cCommitted: u32,
cAborting: u32,
cAborted: u32,
cInDoubt: u32,
cHeuristicDecision: u32,
timeTransactionsUp: FILETIME,
};type
FILETIME {.bycopy.} = object
dwLowDateTime: uint32
dwHighDateTime: uint32
XACTSTATS {.bycopy.} = object
cOpen: uint32
cCommitting: uint32
cCommitted: uint32
cAborting: uint32
cAborted: uint32
cInDoubt: uint32
cHeuristicDecision: uint32
timeTransactionsUp: FILETIMEstruct FILETIME
{
uint dwLowDateTime;
uint dwHighDateTime;
}
struct XACTSTATS
{
uint cOpen;
uint cCommitting;
uint cCommitted;
uint cAborting;
uint cAborted;
uint cInDoubt;
uint cHeuristicDecision;
FILETIME timeTransactionsUp;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; XACTSTATS サイズ: 36 バイト(x64)
dim st, 9 ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; cOpen : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; cCommitting : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; cCommitted : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; cAborting : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; cAborted : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; cInDoubt : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; cHeuristicDecision : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; timeTransactionsUp : FILETIME (+28, 8byte) varptr(st)+28 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILETIME
#field int dwLowDateTime
#field int dwHighDateTime
#endstruct
#defstruct global XACTSTATS
#field int cOpen
#field int cCommitting
#field int cCommitted
#field int cAborting
#field int cAborted
#field int cInDoubt
#field int cHeuristicDecision
#field FILETIME timeTransactionsUp
#endstruct
stdim st, XACTSTATS ; NSTRUCT 変数を確保
st->cOpen = 100
mes "cOpen=" + st->cOpen