41 windows_41_Thread_Semaphore 线程 - 信号
Posted 养老保险年审
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了41 windows_41_Thread_Semaphore 线程 - 信号相关的知识,希望对你有一定的参考价值。
windows_41_Thread_Semaphore 线程 - 信号
// windows_41_Thread_Semaphore.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "windows.h"
/*
效果:前面很快出五个,后面一秒出一个
*/
//1、创建信号量
//CreateSemaphore
//2、等候信号量
//WaitForSingleObject
//WaitForMultipleObjects
//3、释放信号
//ReleaseSemaphore
//4、关闭信号量
//CloseHandle
HANDLE g_hSemaphore = NULL;
//输入1或者5发送1或者5个信号量
DWORD WINAPI ThreadSend3( LPVOID pParam )
{
while (true)
{
//3、释放信号
//ReleaseSemaphore
Sleep( 1000 );
CHAR ch = getchar( );
switch (ch)
{
case ‘1‘:
//释放信号
ReleaseSemaphore( g_hSemaphore, 1, NULL );
break;
case ‘5‘:
ReleaseSemaphore( g_hSemaphore, 5, NULL );
break;
}
}
return 0;
}
DWORD WINAPI ThreadSend( LPVOID pParam )
{
while (true)
{
//3、释放信号
//ReleaseSemaphore
ReleaseSemaphore( g_hSemaphore, 1, NULL );
Sleep( 1000 );
}
return 0;
}
DWORD WINAPI ThreadRecv( LPVOID pParam )
{
while (true)
{
WaitForSingleObject( g_hSemaphore, INFINITE );
printf( "Hello Semaphore\n" );
Sleep( 100 );
}
return 0;
}
void Create( )
{
DWORD nThreadID = 0;
HANDLE hThread[2] = { 0 };
hThread[0] = CreateThread( NULL, 0, ThreadSend, NULL, 0 ,&nThreadID);
hThread[1] = CreateThread( NULL, 0, ThreadRecv, NULL, 0 ,&nThreadID);
// 等候两个线程的结束
WaitForMultipleObjects( 2, hThread, TRUE, INFINITE );
}
int _tmain(int argc, _TCHAR* argv[])
{
//1、创建信号量
//CreateSemaphore
g_hSemaphore = CreateSemaphore( NULL, 5, 10, NULL );
Create( );
//4、关闭信号量
//CloseHandle
CloseHandle( g_hSemaphore );
return 0;
}
以上是关于41 windows_41_Thread_Semaphore 线程 - 信号的主要内容,如果未能解决你的问题,请参考以下文章
TWinControl的消息覆盖函数大全(41个WM_函数和31个CM_函数,它的WndProc就处理鼠标(转发)键盘(取消拖动)焦点和WM_NCHITTEST一共4类消息)
Xcode 8.2.1 - 错误:无效的位码版本(生产者:'802.0.41.0_0' 读者:'800.0.42.1_0')