精通Windows API --- 线程同步控制源码

/* ************************************
*《精通Windows API》 
* 示例代码
* Event.c
* 7.2.1  演示使用Event同步线程
**************************************/

/* 头文件 */
#include <windows.h>
#include <stdio.h>
/* 常量定义 */
#define NUMTHREADS        3 
#define BUFFER_SIZE        16
#define FOR_TIMES        5
/* 全局变量 */
HANDLE hEvent;                                        // 用于同步
char lpSharedBuffer[16] = {0};        // 共享内存
/* 函数声明 */
void UseEvents(void);
DWORD WINAPI EventFunction(LPVOID lpParam);

/*************************************
* int main(void)
* 功能        演示
*
* 参数        未使用
**************************************/
int main()
{
    UseEvents();
    return 0;
}

/*************************************
* void UseEvents(void) 
* 功能        演示Event的使用方法
*
* 参数        未使用
**************************************/
void UseEvents(void) 
{
    HANDLE hThread; 

    hEvent = CreateEvent( 
        NULL,                        // 默认安全属性
        TRUE,                        // 手工重置
        FALSE,                        // 初始为未置位的
        NULL                        // 未命名
        );
    // 判断是否创建成功
    if (hEvent == NULL) 
    { 
        printf("CreateEvent failed (%d)\n", GetLastError());
        return;
    }


    // 创建线程
    hThread = CreateThread(NULL, 0, 
        EventFunction, 
        NULL,
        0, NULL); 
    if (hThread == NULL) 
    {
        printf("CreateThread failed (%d)\n", GetLastError());
        return;
    }        


    // 设置 Event 使ThreadFunction线程可以开始复制数据
    SetEvent(hEvent);

    // 向共享内存中复制数据
    CopyMemory(lpSharedBuffer,"Event",lstrlen("Event"));


    Sleep(2000); // 可以做一些其他处理        

}

/*************************************
* DWORD WINAPI EventFunction(LPVOID lpParam)
* 功能        线程函数,读共享内存
*
* 参数        未使用
**************************************/
DWORD WINAPI EventFunction(LPVOID lpParam) 
{
    DWORD dwWaitResult;
    // 等待,直到事件被置位

    dwWaitResult = WaitForSingleObject( 
        hEvent,                        // Event 句柄
        INFINITE);                // 无限等待

    if (dwWaitResult != WAIT_OBJECT_0) 
    {
        printf("Wait error: %d\n", GetLastError()); 
        return 0;
    }
    // 读共享内存
    printf("%s\n",lpSharedBuffer);

    // 重置事件
    if (! ResetEvent(hEvent) ) 
    { 
        printf("SetEvent failed (%d)\n", GetLastError());
        return 0;
    }
    return 1;
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值