本文整理汇总了C++中InitializeCriticalSection函数的典型用法代码示例。如果您正苦于以下问题:C++ InitializeCriticalSection函数的具体用法?C++ InitializeCriticalSection怎么用?C++ InitializeCriticalSection使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了InitializeCriticalSection函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: csinitialize
/* Initialize critical section */
void csinitialize (CRITICAL_SECTION *cs) {
InitializeCriticalSection (cs);
}
示例2: qemu_mutex_init
void qemu_mutex_init(QemuMutex *mutex)
{
mutex->owner = 0;
InitializeCriticalSection(&mutex->lock);
}
示例3: InitializeCriticalSection
win_data::win_data()
{
InitializeCriticalSection(&m_cs);
}
示例4: SysLoggerMain
//.........这里部分代码省略.........
elog(FATAL, "setsid() failed: %m");
#endif
/*
* Properly accept or ignore signals the postmaster might send us
*
* Note: we ignore all termination signals, and instead exit only when all
* upstream processes are gone, to ensure we don't miss any dying gasps of
* broken backends...
*/
pqsignal(SIGHUP, sigHupHandler); /* set flag to read config file */
pqsignal(SIGINT, SIG_IGN);
pqsignal(SIGTERM, SIG_IGN);
pqsignal(SIGQUIT, SIG_IGN);
pqsignal(SIGALRM, SIG_IGN);
pqsignal(SIGPIPE, SIG_IGN);
pqsignal(SIGUSR1, sigUsr1Handler); /* request log rotation */
pqsignal(SIGUSR2, SIG_IGN);
/*
* Reset some signals that are accepted by postmaster but not here
*/
pqsignal(SIGCHLD, SIG_DFL);
pqsignal(SIGTTIN, SIG_DFL);
pqsignal(SIGTTOU, SIG_DFL);
pqsignal(SIGCONT, SIG_DFL);
pqsignal(SIGWINCH, SIG_DFL);
PG_SETMASK(&UnBlockSig);
#ifdef WIN32
/* Fire up separate data transfer thread */
InitializeCriticalSection(&sysloggerSection);
EnterCriticalSection(&sysloggerSection);
{
unsigned int tid;
threadHandle = (HANDLE) _beginthreadex(0, 0, pipeThread, 0, 0, &tid);
}
#endif /* WIN32 */
/* remember active logfile parameters */
currentLogDir = pstrdup(Log_directory);
currentLogFilename = pstrdup(Log_filename);
currentLogRotationAge = Log_RotationAge;
/* set next planned rotation time */
set_next_rotation_time();
/* main worker loop */
for (;;)
{
bool time_based_rotation = false;
#ifndef WIN32
int bytesRead;
int rc;
fd_set rfds;
struct timeval timeout;
#endif
if (got_SIGHUP)
{
got_SIGHUP = false;
ProcessConfigFile(PGC_SIGHUP);
示例5: ChmThumbnailTask
ChmThumbnailTask(ChmDoc *doc, HWND hwnd, SizeI size, const std::function<void(RenderedBitmap*)> saveThumbnail) :
doc(doc), hwnd(hwnd), hw(nullptr), size(size), saveThumbnail(saveThumbnail) {
InitializeCriticalSection(&docAccess);
}
示例6: main
int
main (int argc, char *argv[])
{
int i = 0;
CRITICAL_SECTION cs;
old_mutex_t ox;
pthread_mutexattr_init(&ma);
printf( "=============================================================================\n");
printf( "\nLock plus unlock on an unlocked mutex.\n%ld iterations\n\n",
ITERATIONS);
printf( "%-45s %15s %15s\n",
"Test",
"Total(msec)",
"average(usec)");
printf( "-----------------------------------------------------------------------------\n");
/*
* Time the loop overhead so we can subtract it from the actual test times.
*/
TESTSTART
assert(1 == one);
assert(1 == one);
TESTSTOP
durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
overHeadMilliSecs = durationMilliSecs;
TESTSTART
assert((dummy_call(&i), 1) == one);
assert((dummy_call(&i), 1) == one);
TESTSTOP
durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
printf( "%-45s %15ld %15.3f\n",
"Dummy call x 2",
durationMilliSecs,
(float) durationMilliSecs * 1E3 / ITERATIONS);
TESTSTART
assert((interlocked_inc_with_conditionals(&i), 1) == one);
assert((interlocked_dec_with_conditionals(&i), 1) == one);
TESTSTOP
durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
printf( "%-45s %15ld %15.3f\n",
"Dummy call -> Interlocked with cond x 2",
durationMilliSecs,
(float) durationMilliSecs * 1E3 / ITERATIONS);
TESTSTART
assert((InterlockedIncrement((LPLONG)&i), 1) == (LONG)one);
assert((InterlockedDecrement((LPLONG)&i), 1) == (LONG)one);
TESTSTOP
durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
printf( "%-45s %15ld %15.3f\n",
"InterlockedOp x 2",
durationMilliSecs,
(float) durationMilliSecs * 1E3 / ITERATIONS);
InitializeCriticalSection(&cs);
TESTSTART
assert((EnterCriticalSection(&cs), 1) == one);
assert((LeaveCriticalSection(&cs), 1) == one);
TESTSTOP
DeleteCriticalSection(&cs);
durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
printf( "%-45s %15ld %15.3f\n",
"Simple Critical Section",
durationMilliSecs,
(float) durationMilliSecs * 1E3 / ITERATIONS);
old_mutex_use = OLD_WIN32CS;
assert(old_mutex_init(&ox, NULL) == 0);
TESTSTART
assert(old_mutex_lock(&ox) == zero);
assert(old_mutex_unlock(&ox) == zero);
TESTSTOP
assert(old_mutex_destroy(&ox) == 0);
durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
printf( "%-45s %15ld %15.3f\n",
"Old PT Mutex using a Critical Section (WNT)",
//.........这里部分代码省略.........
示例7: InitializeCriticalSection
int CESDDevice::init(const char* acInitString)
{
InitializeCriticalSection(&m_csDevice);
int i, iRetVal = 0;
int txTimeOut = 0;
char* pcToken;
char acString[128];
if(m_bInitFlag)
{
warning("device already initialized");
m_iErrorState = ERRID_DEV_ISINITIALIZED;
return m_iErrorState;
}
m_iDeviceId = -1;
m_iErrorState = 0;
strncpy(m_acInitString,acInitString,128);
strncpy(acString,acInitString,128);
pcToken = strtok( acString, ":" );
if( !pcToken )
{ m_iErrorState = ERRID_DEV_BADINITSTRING;
return m_iErrorState;
}
if( strcmp( pcToken, "ESD" ) != 0 )
{ m_iErrorState = ERRID_DEV_BADINITSTRING;
return m_iErrorState;
}
pcToken = strtok( NULL, "," );
if( !pcToken )
{ m_iErrorState = ERRID_DEV_BADINITSTRING;
return m_iErrorState;
}
m_iDeviceId = atoi(pcToken);
pcToken = strtok( NULL, "," );
if( !pcToken )
{ m_iErrorState = ERRID_DEV_BADINITSTRING;
return m_iErrorState;
}
m_iBaudRate = atoi(pcToken);
#if defined(__LINUX__)
m_uiTimeOut = 6;
#endif
#if defined (_WIN32)
switch( m_iBaudRate )
{
case 125:
case 250:
m_uiTimeOut = 4;
break;
case 500:
m_uiTimeOut = 3;
break;
case 1000:
m_uiTimeOut = 2;
break;
default:
m_uiTimeOut = 10;
break;
}
#endif
try
{
iRetVal = canOpen(
m_iDeviceId, // Net
0, // Mode
m_uiQueueSize, // TX Queue
m_uiQueueSize, // RX Queue
m_uiTimeOut, // Tx Timeout
m_uiTimeOut, // Rx Timeout
&m_hDevice);
if(iRetVal != NTCAN_SUCCESS)
{
warning("can open failed Errorcode: %d", iRetVal);
getDeviceError(iRetVal);
m_iErrorState = ERRID_DEV_INITERROR;
return m_iErrorState;
}
iRetVal = canOpen(
m_iDeviceId, // Net
0, // Mode
1, // TX Queue
1, // RX Queue
600, // Tx Timeout
100, // Rx Timeout
&m_hSyncDevice);
if(iRetVal != NTCAN_SUCCESS)
{
warning("can open failed Errorcode: %d", iRetVal);
getDeviceError(iRetVal);
m_iErrorState = ERRID_DEV_INITERROR;
return m_iErrorState;
}
}
catch(...)
{
warning("init ESD device failed no library found");
m_iErrorState = ERRID_DEV_NOLIBRARY;
return m_iErrorState;
//.........这里部分代码省略.........
示例8: PrepareXACT
//-----------------------------------------------------------------------------------------
// This function does the following steps:
//
// 1. Initialize XACT by calling pEngine->Initialize
// 2. Register for the XACT notification desired
// 3. Create the in memory XACT wave bank(s) you want to use
// 4. Create the streaming XACT wave bank(s) you want to use
// 5. Create the XACT sound bank(s) you want to use
// 6. Store indices to the XACT cue(s) your game uses
//-----------------------------------------------------------------------------------------
HRESULT PrepareXACT()
{
HRESULT hr;
WCHAR str[MAX_PATH];
HANDLE hFile;
DWORD dwFileSize;
DWORD dwBytesRead;
HANDLE hMapFile;
// Clear struct
ZeroMemory( &g_audioState, sizeof( AUDIO_STATE ) );
InitializeCriticalSection( &g_audioState.cs );
hr = CoInitializeEx( NULL, COINIT_MULTITHREADED ); // COINIT_APARTMENTTHREADED will work too
if( SUCCEEDED( hr ) )
{
// Switch to auditioning mode based on command line. Change if desired
bool bAuditionMode = DoesCommandLineContainAuditionSwitch();
bool bDebugMode = false;
DWORD dwCreationFlags = 0;
if( bAuditionMode ) dwCreationFlags |= XACT_FLAG_API_AUDITION_MODE;
if( bDebugMode ) dwCreationFlags |= XACT_FLAG_API_DEBUG_MODE;
hr = XACT3CreateEngine( dwCreationFlags, &g_audioState.pEngine );
}
if( FAILED( hr ) || g_audioState.pEngine == NULL )
return E_FAIL;
// Initialize & create the XACT runtime
XACT_RUNTIME_PARAMETERS xrParams = {0};
xrParams.lookAheadTime = XACT_ENGINE_LOOKAHEAD_DEFAULT;
xrParams.fnNotificationCallback = XACTNotificationCallback;
hr = g_audioState.pEngine->Initialize( &xrParams );
if( FAILED( hr ) )
return hr;
//-----------------------------------------------------------------------------------------
// Register for XACT notifications
//-----------------------------------------------------------------------------------------
// The "wave bank prepared" notification will let the app know when it is save to use
// play cues that reference streaming wave data.
XACT_NOTIFICATION_DESCRIPTION desc = {0};
desc.flags = XACT_FLAG_NOTIFICATION_PERSIST;
desc.type = XACTNOTIFICATIONTYPE_WAVEBANKPREPARED;
g_audioState.pEngine->RegisterNotification( &desc );
// The "sound bank destroyed" notification will let the app know when it is save to use
// play cues that reference streaming wave data.
desc.flags = XACT_FLAG_NOTIFICATION_PERSIST;
desc.type = XACTNOTIFICATIONTYPE_SOUNDBANKDESTROYED;
g_audioState.pEngine->RegisterNotification( &desc );
// The "cue stop" notification will let the app know when it a song stops so a new one
// can be played
desc.flags = XACT_FLAG_NOTIFICATION_PERSIST;
desc.type = XACTNOTIFICATIONTYPE_CUESTOP;
desc.cueIndex = XACTINDEX_INVALID;
g_audioState.pEngine->RegisterNotification( &desc );
// The "cue prepared" notification will let the app know when it a a cue that uses
// streaming data has been prepared so it is ready to be used for zero latency streaming
desc.flags = XACT_FLAG_NOTIFICATION_PERSIST;
desc.type = XACTNOTIFICATIONTYPE_CUEPREPARED;
desc.cueIndex = XACTINDEX_INVALID;
g_audioState.pEngine->RegisterNotification( &desc );
if( FAILED( hr = FindMediaFileCch( str, MAX_PATH, L"InMemoryWaveBank.xwb" ) ) )
return hr;
// Create an "in memory" XACT wave bank file using memory mapped file IO
hr = E_FAIL; // assume failure
hFile = CreateFile( str, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL );
if( hFile != INVALID_HANDLE_VALUE )
{
dwFileSize = GetFileSize( hFile, NULL );
if( dwFileSize != -1 )
{
hMapFile = CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, dwFileSize, NULL );
if( hMapFile )
{
g_audioState.pbInMemoryWaveBank = MapViewOfFile( hMapFile, FILE_MAP_READ, 0, 0, 0 );
if( g_audioState.pbInMemoryWaveBank )
{
hr = g_audioState.pEngine->CreateInMemoryWaveBank( g_audioState.pbInMemoryWaveBank, dwFileSize, 0,
0, &g_audioState.pInMemoryWaveBank );
}
CloseHandle( hMapFile ); // pbInMemoryWaveBank maintains a handle on the file so close this unneeded handle
//.........这里部分代码省略.........
示例9: InitSerivce
DWORD InitSerivce()
{
DWORD ret;
DWORD i;
char ip[20] = {0};
int port;
WSADATA wsaData;
SOCKADDR_IN inAddr;
char configFile[MAX_PATH] = {0};
char *q;
FILE *f;
GetModuleFileName(NULL, configFile, sizeof(configFile));
q = strrchr(configFile, '\\');
if(q == NULL)
{
return 10;
}
q++;
*q = '\0';
strcat(configFile, CONFIG_FILE);
ret = GetPrivateProfileString("music", "dir", "", dir, sizeof(dir), configFile);
if (ret == 0)
{
return 1;
}
ret = GetPrivateProfileString("network", "ip", "", ip, sizeof(ip), configFile);
if (ret == 0)
{
return 1;
}
port = GetPrivateProfileInt("network", "port", 0, configFile);
if(port == 0)
{
return 1;
}
_snprintf(glob_file, sizeof(glob_file), "%s\\*.mp3", dir);
ret = mpg123_init();
if(ret != MPG123_OK)
{
return 2;
}
mh = mpg123_new(NULL, &ret);
if(mh == NULL)
{
return 3;
}
for(i = 0; i < HEAD_NUM; i++)
{
p[i] = (LPSTR)malloc(SOUND_BUFFER_LEN);
pHeader[i] = (LPWAVEHDR)malloc(sizeof(WAVEHDR));
if(p[i] == NULL ||
pHeader[i] == NULL)
{
return 4;
}
}
ret = WSAStartup(0x0202, &wsaData);
if(ret != 0)
{
return 5;
}
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == INVALID_SOCKET)
{
return 6;
}
inAddr.sin_family = AF_INET;
inAddr.sin_addr.s_addr = inet_addr(ip);
inAddr.sin_port = htons(port);
ret = bind(sock, (const struct sockaddr *)&inAddr, sizeof(inAddr));
if(ret == SOCKET_ERROR)
{
return 7;
}
ret = listen(sock, 1);
if(ret == SOCKET_ERROR)
{
return 8;
}
if(!PathFileExists(dir))
{
return 9;
}
InitializeCriticalSection(&cs);
//.........这里部分代码省略.........
示例10: CmdLib_SpewOutputFunc
SpewRetval_t CmdLib_SpewOutputFunc( SpewType_t type, char const *pMsg )
{
// Hopefully two threads won't call this simultaneously right at the start!
if ( !g_bSpewCSInitted )
{
InitializeCriticalSection( &g_SpewCS );
g_bSpewCSInitted = true;
}
WORD old;
SpewRetval_t retVal;
EnterCriticalSection( &g_SpewCS );
{
if (( type == SPEW_MESSAGE ) || (type == SPEW_LOG ))
{
Color c = GetSpewOutputColor();
if ( c.r() != 255 || c.g() != 255 || c.b() != 255 )
{
// custom color
old = SetConsoleTextColor( c.r(), c.g(), c.b(), c.a() );
}
else
{
old = SetConsoleTextColor( 1, 1, 1, 0 );
}
retVal = SPEW_CONTINUE;
}
else if( type == SPEW_WARNING )
{
old = SetConsoleTextColor( 1, 1, 0, 1 );
retVal = SPEW_CONTINUE;
}
else if( type == SPEW_ASSERT )
{
old = SetConsoleTextColor( 1, 0, 0, 1 );
retVal = SPEW_DEBUGGER;
#ifdef MPI
// VMPI workers don't want to bring up dialogs and suchlike.
// They need to have a special function installed to handle
// the exceptions and write the minidumps.
// Install the function after VMPI_Init with a call:
// SetupToolsMinidumpHandler( VMPI_ExceptionFilter );
if ( g_bUseMPI && !g_bMPIMaster && !Plat_IsInDebugSession() )
{
// Generating an exception and letting the
// installed handler handle it
::RaiseException
(
0, // dwExceptionCode
EXCEPTION_NONCONTINUABLE, // dwExceptionFlags
0, // nNumberOfArguments,
NULL // const ULONG_PTR* lpArguments
);
// Never get here (non-continuable exception)
VMPI_HandleCrash( pMsg, NULL, true );
exit( 0 );
}
#endif
}
else if( type == SPEW_ERROR )
{
old = SetConsoleTextColor( 1, 0, 0, 1 );
retVal = SPEW_ABORT; // doesn't matter.. we exit below so we can return an errorlevel (which dbg.dll doesn't do).
}
else
{
old = SetConsoleTextColor( 1, 1, 1, 1 );
retVal = SPEW_CONTINUE;
}
if ( !g_bSuppressPrintfOutput || type == SPEW_ERROR )
printf( "%s", pMsg );
OutputDebugString( pMsg );
if ( type == SPEW_ERROR )
{
printf( "\n" );
OutputDebugString( "\n" );
}
if( g_pLogFile )
{
CmdLib_FPrintf( g_pLogFile, "%s", pMsg );
g_pFileSystem->Flush( g_pLogFile );
}
// Dispatch to other spew hooks.
FOR_EACH_LL( g_ExtraSpewHooks, i )
g_ExtraSpewHooks[i]( pMsg );
RestoreConsoleTextColor( old );
}
LeaveCriticalSection( &g_SpewCS );
if ( type == SPEW_ERROR )
//.........这里部分代码省略.........
示例11: InitializeCriticalSection
/* Windows Critical Section Implementation */
Mutex::Mutex() { InitializeCriticalSection(&cs); }
示例12: JpfsvsCreateContext
static HRESULT JpfsvsCreateContext(
__in DWORD ProcessId,
__in_opt PCWSTR UserSearchPath,
__out PJPFSV_CONTEXT *Context
)
{
BOOL AutoLoadModules;
HRESULT Hr = E_UNEXPECTED;
HANDLE ProcessHandle = NULL;
BOOL SymInitialized = FALSE;
PJPFSV_CONTEXT TempContext;
BOOL TraceTabInitialized = FALSE;
if ( ! ProcessId || ! Context )
{
return E_INVALIDARG;
}
if ( ProcessId == JPFSV_KERNEL )
{
//
// Use a pseudo-handle.
//
ProcessHandle = JPFSV_KERNEL_PSEUDO_HANDLE;
AutoLoadModules = FALSE;
}
else
{
//
// Use the process handle for dbghelp, that makes life easier.
//
// N.B. Handle is closed in JpfsvsDeleteContext.
//
ProcessHandle = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE,
ProcessId );
if ( ! ProcessHandle )
{
DWORD Err = GetLastError();
return HRESULT_FROM_WIN32( Err );
}
AutoLoadModules = TRUE;
}
//
// Create and initialize object.
//
TempContext = ( PJPFSV_CONTEXT ) malloc( sizeof( JPFSV_CONTEXT ) );
if ( ! TempContext )
{
Hr = E_OUTOFMEMORY;
goto Cleanup;
}
TempContext->Signature = JPFSV_CONTEXT_SIGNATURE;
TempContext->u.ProcessId = ProcessId;
TempContext->ProcessHandle = ProcessHandle;
TempContext->ReferenceCount = 0;
InitializeCriticalSection( &TempContext->ProtectedMembers.Lock );
TempContext->ProtectedMembers.TraceSession = NULL;
TempContext->ProtectedMembers.TraceStarted = FALSE;
TempContext->ProtectedMembers.EventProcessor = FALSE;
Hr = JpfsvpInitializeTracepointTable( &TempContext->ProtectedMembers.Tracepoints );
if ( SUCCEEDED( Hr ) )
{
TraceTabInitialized = TRUE;
}
else
{
goto Cleanup;
}
//
// Load dbghelp stuff.
//
EnterCriticalSection( &JpfsvpDbghelpLock );
if ( ! SymInitialize(
ProcessHandle,
UserSearchPath,
AutoLoadModules ) )
{
DWORD Err = GetLastError();
if ( ERROR_INVALID_DATA == ( Err & 0xFFFF ) )
{
//
// Most likely a 32bit vs. 64 bit mismatch.
//
Hr = JPFSV_E_ARCH_MISMATCH;
}
else
{
Hr = HRESULT_FROM_WIN32( Err );
}
}
//.........这里部分代码省略.........
示例13: WndProc
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HANDLE hPipe;
#ifdef _DEBUG
RECT r;
HDC hDC;
#endif
switch(message)
{
case WM_CREATE:
#ifdef _DEBUG
GetClientRect(hWnd, &r);
hwndEdit = CreateWindowW(L"EDIT", L"",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_READONLY,
0, 0, r.right, r.bottom, hWnd, NULL, hInst, NULL);
hDC = GetDC(hwndEdit);
hFont = CreateFontW(-MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 72), 0, 0, 0,
FW_NORMAL, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH,
L"Meiryo");
SendMessageW(hwndEdit, WM_SETFONT, (WPARAM)hFont, 0);
ReleaseDC(hwndEdit, hDC);
#endif
InitializeCriticalSection(&csUserDataSave);
bUserDicChg = FALSE;
LoadSKKUserDic();
bSrvThreadExit = FALSE;
hThreadSrv = SrvStart();
if(hThreadSrv == NULL)
{
DestroyWindow(hWnd);
}
break;
#ifdef _DEBUG
case WM_SIZE:
GetClientRect(hWnd, &r);
MoveWindow(hwndEdit, 0, 0, r.right, r.bottom, TRUE);
break;
#endif
case WM_POWERBROADCAST:
if(wParam == PBT_APMSUSPEND)
{
StartSaveSKKUserDic(FALSE);
BackUpSKKUserDic();
}
break;
case WM_DESTROY:
case WM_ENDSESSION:
#ifdef _DEBUG
DeleteObject(hFont);
#endif
bSrvThreadExit = TRUE;
hPipe = CreateFileW(mgrpipename, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, SECURITY_SQOS_PRESENT | SECURITY_EFFECTIVE_ONLY | SECURITY_IDENTIFICATION, NULL);
if(hPipe != INVALID_HANDLE_VALUE)
{
CloseHandle(hPipe);
WaitForSingleObject(hThreadSrv, INFINITE);
}
CloseHandle(hThreadSrv);
StartSaveSKKUserDic(FALSE);
if(message == WM_ENDSESSION)
{
BackUpSKKUserDic();
}
DeleteCriticalSection(&csUserDataSave);
ReleaseMutex(hMutex);
CloseHandle(hMutex);
PostQuitMessage(0);
break;
default:
return DefWindowProcW(hWnd, message, wParam, lParam);
break;
}
return 0;
}
示例14: InitializeCriticalSection
ThreadSafeOutput::ThreadSafeOutput()
{
//set up critical section for below
InitializeCriticalSection(&ourCritSection);
}
示例15: InitializeCriticalSection
bool CWAbsMutex::AMutexInit(thread_mutex mutext)
{
InitializeCriticalSection((LPCRITICAL_SECTION)mutext);
return (true);
}