2010-06-25
2010-06-22
C# 的執行緒同步
用 C++ 寫多執行緒同步程式時常用到的功能有 InterlockedIncrement、CRITICAL_SECTION 和 Semaphore,其對照在 C# 下的使用方式為:
1. InterlockedIncrement
C++ 的用法如下:
UINT nCt =0;
InterlockedIncrement( &nCt );
C# 的用法如下:
int nCt =0;
System.Threading.Interlocked.Increment( ref uCt );
2. CRITICAL_SECTION
C++ 的用法如下:
CRITICAL_SECTION g_cs;
EnterCriticalSection( &g_cs );
{
//...
}
LeaveCriticalSection( &g_cs );
C# 的用法如下:
Object cs = new Object();
lock (cs)
{
//...
}
3. Semaphore
C++ 的用法如下:
HANDLE m_Handle =CreateSemaphore( NULL, 1, 1, L"SemaphoreName" );
WaitForSingleObject( m_Handle, nWaitTime );
{
//...
}
ReleaseSemaphore( m_Handle, 1, NULL );
CloseHandle( m_Handle );
C# 的用法如下:
private static AutoResetEvent m_Handle =new AutoResetEvent( true );
m_Handle.WaitOne();
{
//...
}
m_Handle.Set();
1. InterlockedIncrement
C++ 的用法如下:
UINT nCt =0;
InterlockedIncrement( &nCt );
C# 的用法如下:
int nCt =0;
System.Threading.Interlocked.Increment( ref uCt );
2. CRITICAL_SECTION
C++ 的用法如下:
CRITICAL_SECTION g_cs;
EnterCriticalSection( &g_cs );
{
//...
}
LeaveCriticalSection( &g_cs );
C# 的用法如下:
Object cs = new Object();
lock (cs)
{
//...
}
3. Semaphore
C++ 的用法如下:
HANDLE m_Handle =CreateSemaphore( NULL, 1, 1, L"SemaphoreName" );
WaitForSingleObject( m_Handle, nWaitTime );
{
//...
}
ReleaseSemaphore( m_Handle, 1, NULL );
CloseHandle( m_Handle );
C# 的用法如下:
private static AutoResetEvent m_Handle =new AutoResetEvent( true );
m_Handle.WaitOne();
{
//...
}
m_Handle.Set();
2010-06-17
C# 的 delegate
delegate 大致類似 C++ 的函數指標。
C++ 的用法如下:
void ShowPercentage( int nPercentage );
typedef void (* CALLBACK) (int);
CALLBACK =showPercentage;
呼叫 ShowPercentage 函數:
CALLBACK( 100 );
或
ShowPercentage( 100 );
C# 的用法如下:
void ShowPercentage( int nPercentage );
delegate void ShowPercentageDelegate( int nPercentage );
ShowPercentageDelegate CALLBACK = ShowPercentage;
呼叫 ShowPercentage 函數:
CALLBACK( 100 );
或
ShowPercentage( 100 );
C++ 的用法如下:
void ShowPercentage( int nPercentage );
typedef void (* CALLBACK) (int);
CALLBACK =showPercentage;
呼叫 ShowPercentage 函數:
CALLBACK( 100 );
或
ShowPercentage( 100 );
C# 的用法如下:
void ShowPercentage( int nPercentage );
delegate void ShowPercentageDelegate( int nPercentage );
ShowPercentageDelegate CALLBACK = ShowPercentage;
呼叫 ShowPercentage 函數:
CALLBACK( 100 );
或
ShowPercentage( 100 );
2010-06-01
Collada 模型檢視器 + 擴增實境 AR
HK416
Robot
F430
A6M3
SBD3
Titanic
Taipei 101
YZF-R1
小弟利用工作閒餘寫了一個具有擴增實境 (AR) 的 Collada 模型檢視器, 主要開啟的是 Google 3D Warehouse 裡的 collada 模型, render 的部分接下來會增強光線和陰影效果 (例如 HDR, SSAO 之類的), 但想要問各位對程式接下去的發展有沒有什麼建議 ? (例如增加場景編輯, 物理運算, 人物遊覽場景, 寵物飼養等....,)
程式下載
ps.
- 因為用 media foundation library 來擷取 webcam 畫面, 所以程式目前只能在 vista 或 win7 上跑, 過些時候再把 xp 的版本放上來.
- 執行路徑在 bin/DAELoader.exe
- 從 3D warehouse 下載的 Collada 檔為 zip 格式, 將它解壓縮之後可以在 models 目錄下找到副檔名 dae 的檔案, 開啟此檔即可載入模型.
- 將副檔名 dae 檔關聯到 DAEViewer.exe, 以後只要連點 dae 檔, 系統就會自動呼叫 DAEViewer 來開啟之.
訂閱:
文章
(
Atom
)