#pragma once
template <class SAsync>
class CVQueueAsync
{
public:
CVQueueAsync(void);
~CVQueueAsync(void);
public:
SAsync* QAlloc();
SAsync* QGetFirst();
SAsync* QGetAt(int index);
public:
int QSkip();
int QCount();
private:
SAsync m_asyncs[VTCP_ASYNC_MAX_COUNT];
int m_s; //開始索引
int m_c; //個數
};
template <class SAsync>
CVQueueAsync<SAsync>::CVQueueAsync(void)
{
m_s=0;
m_c=0;
}
template <class SAsync>
CVQueueAsync<SAsync>::~CVQueueAsync(void)
{
}
template <class SAsync>
SAsync* CVQueueAsync<SAsync>::QAlloc()
{
if (m_c == VTCP_ASYNC_MAX_COUNT)
{
ASSERT(FALSE); return NULL;
}
int index = (m_s + m_c) & VTCP_ASYNC_MAX_COUNT_MASK;
m_c++;
return &m_asyncs[index];
}
template <class SAsync>
SAsync* CVQueueAsync<SAsync>::QGetFirst()
{
if (0 >= m_c)
{
return NULL;
}
return &m_asyncs[m_s];
}
template <class SAsync>
SAsync* CVQueueAsync<SAsync>::QGetAt(int index)
{
if (index >= m_c)
{
ASSERT(FALSE); return NULL;
}
return &m_asyncs[(m_s + index) & VTCP_ASYNC_MAX_COUNT_MASK];
}
template <class SAsync>
int CVQueueAsync<SAsync>::QSkip()
{
if (m_c == 0)
{
ASSERT(FALSE); return ERROR_OBJECT_NOT_FOUND;
}
m_s = (m_s + 1) & VTCP_ASYNC_MAX_COUNT_MASK;
m_c--;
return 0;
}
template <class SAsync>
int CVQueueAsync<SAsync>::QCount()
{
return m_c;
}
求轉換 VC到DELPHI版
//重點是
public:
SAsync* QAlloc();
SAsync* QGetFirst();
SAsync* QGetAt(int index);
這個我不清楚怎么轉換
uj5u.com熱心網友回復:
好像就是個陣列?自己定義個陣列就行了, 或者用TList, TStringlist之類的串列物件
uj5u.com熱心網友回復:
如果僅僅轉出delphi代碼:type
CVQueueAsync = class
private
m_asyncs: array [0..VTCP_ASYNC_MAX_COUNT-1] of SAsync;
protected
public
constructor Create();
destructor Destroy; override;
function QAlloc(): SAsync;
end;
...
function CVQueueAsync.QAlloc(): SAsync;
begin
result := nil;
end;
delphi中物件就是個指標.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151951.html
標籤:VCL組件開發及應用
