同步方法
1、互锁函数
互锁函数运行在用户模式。它能保证当一个线程访问一个变量时,其它线程无法访问此变量,以确保变量值的唯一性。这种访问方式被称为原子访问。互锁函数及其功能见如下列表:
函数 参数和功能 InterlockedIncrement 参数为PLONG类型。此函数使一个LONG变量增1 InterlockedDecrement 参数为PLONG类型。此函数使一个LONG变量减1 InterlockedExchangeAdd 参数1为PLONG类型,参数2为LONG类型。此函数将参数2赋给参数1指向的值 InterlockedExchange 参数1为PLONG类型,参数2为LONG类型。此函数将参数2的值赋给参数1指向的值 InterlockedExchangePointer 参数为PVOID* 类型,参数2为PVOID类型。此函数功能同上。具体参见帮助 InterlockedCompareExchange 参数1为PLONG类型,参数2为LONG类型,参数3为LONG类型。此函数将参数1指向的值与参数3比较,相同则把参数2的值赋给参数1指向的值。不相同则不变 InterlockedCompareExchangePointer 参数1为PVOID* 类型,参数2为PVOID类型,参数3为PVOID。此函数功能同上。
2.CriticalSection,event,mutex,Semaphore
6、消息队列
Windows CE.NET允许一个应用程序或驱动程序创建自己的消息队列。消息队列既可以作为在线程之间传递数据的工具,也可以作为线程之间同步的工具。它的优点是需要很小的内存,一般只用于点到点的通信。
和消息队列相关的函数:
HANDLE WINAPI CreateMsgQueue(LPCWSTR lpszName,
LPMSGQUEUEOPTIONS lpOptions);
BOOL WINAPI CloseMsgQueue(HANDLE hMsgQ);
BOOL GetMsgQueueInfo(HANDLE hMsgQ,
LPMSGQUEUEINFO lpInfo);
HANDLE WINAPI OpenMsgQueue(HANDLE hSrcProc,
HANDLE hMsgQ,
LPMSGQUEUEOPTIONS lpOptions);
BOOL ReadMsgQueue(HANDLE hMsgQ,
LPVOID lpBuffer,
DWORD cbBufferSize,
LPDWORD lpNumberOfBytesRead,
DWORD dwTimeout,
DWORD *pdwFlags);
BOOL WINAPI WriteMsgQueue(HANDLE hMsgQ,
LPVOID lpBuffer,
DWORD cbDataSize,
DWORD dwTimeout,
DWORD dwFlags);
使用CreateMsgQueue函数创建一个消息队列,传递一个MSGQUEUEOPTIONS结构指针。在这个结构中设置标志(允许队列缓冲区动态改变大小,允许直接读或者写操作而不管之前是否有过写操作或读操作)、队列允许的最大消息数、队列属性(只读或者只写)。使用WriteMsgQueue函数把一个消息写入到消息队列中。传递一个消息队列的缓冲区、消息数据的大小、写入缓冲区的超时值、标志。使用ReadMsgQueue函数把一个消息从消息队列中读出。使用CloseMsgQueue函数关闭消息队列缓冲区。使用OpenMsgQueue函数能够打开其它进程中创建的消息队列。另外可以用等待函数等待消息队列的变化。当消息队列由没有消息到有消息时,或由满消息到不满消息时唤醒调用等待函数的线程。关于消息队列我并没有实验过,MSDN上有几个简单的例子。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/777154/viewspace-934628/ ,如需转载,请注明出处,否则将追究法律责任。