事件实现中介者对话

  • 互斥,解决线程冲突
  • 事件,解决线程通信
  • 临界区,解决线程冲突
  • 时间,同步线程

有时线程之间的信号不同步或者乱序。这时需要信号复位。

event[0] = CreatEvent(NULL, TRUE, FALSE, NULL);
//第二个参数;TRUE代表手动复位 (就是用ResetEvent),  FALSE代表自动进行信号复位
//第三个参数:信号的状态
//第四个参数:信号标记名称
ResetEvent(event[0]);    //信号复位

信号你用完了之后,再次利用,这中间就会发生冲突问题,有的信号是自动复位的,但是多线程操作的时候,同时访问时,有时候会操作失败,所以需要我们主动去复位。

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>
//互斥解决线程冲突
//事件解决线程通信
//临界区解决线程冲突
//时间同步线程

HANDLE event[5] = { 0 };
HANDLE thread[5] = { 0 };

char str[256] = { 0 };//全局变量

DWORD WINAPI  fupo(void *p)
{
    int i = 0;
    int k = 0;
    while (++i)
    {
        if (k==0)
        {

            WaitForSingleObject(event[1], INFINITE);//无线等待一个信号
            printf("媒婆读取%d次,%s\n", i, str);
            Sleep(1000);
            SetEvent(event[2]);

            k = 1;
        }
        else
        {
            WaitForSingleObject(event[3], INFINITE);//无线等待一个信号
            printf("媒婆读取%d次,%s\n", i, str);
            Sleep(1000);
            SetEvent(event[0]);

            k = 0;
        }

    }

}

DWORD WINAPI haihua(void *p)
{
    int i = 1;
    memset(str, ‘0‘, 256);
    sprintf(str, "海华%d次说: i love you fangfang ,please help me debug", i);
    //printf("\n海华%d次说: i love you fangfang ,please help me debug", i);
    Sleep(1000);
    SetEvent(event[1]);

    while (++i)
    {
        WaitForSingleObject(event[0], INFINITE);//无线等待一个信号
        //printf("\n海华%d次说: i love you fangfang ,please help me debug", i);
        memset(str, ‘0‘, 256);
        sprintf(str, "海华%d次说: i love you fangfang ,please help me debug", i);
        Sleep(1000);
        //ResetEvent(event[0]);//信号复位
        SetEvent(event[1]);

    }
    return 1;

}

DWORD WINAPI wangfang(void *p)
{
    int i = 0;
    while (++i)
    {
        WaitForSingleObject(event[2], INFINITE);//无线等待一个信号
        //printf("\nwangfang%d次说: sorry ,but i love you", i);
        memset(str, ‘0‘, 256);
        sprintf(str, "wangfang%d次说: sorry ,but i love you", i);

        Sleep(1000);
        //ResetEvent(event[1]);
        SetEvent(event[3]);

    }
    return 1;

}

void main()
{
    //第二个参数代表,FALSE,自动,TRUE手动需要reset
    //第三个参数信号状态
    //第四个参数标记名称
    event[0] = CreateEventA(NULL, FALSE, FALSE, "hello");
    event[1] = CreateEventA(NULL, FALSE, FALSE, NULL);
    event[2] = CreateEventA(NULL, FALSE, FALSE, "hello");
    event[3] = CreateEventA(NULL, FALSE, FALSE, NULL);

    thread[0] = CreateThread(NULL, 0, haihua, NULL, 0, NULL);
    thread[1] = CreateThread(NULL, 0, wangfang, NULL, 0, NULL);
    thread[2] = CreateThread(NULL, 0, fupo, NULL, 0, NULL);

    WaitForMultipleObjects(3, thread, TRUE, INFINITE);

    system("pause");
}
时间: 2024-10-26 21:36:40

事件实现中介者对话的相关文章

高仿微信对话列表滑动删除效果(转)

前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有.思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可.由于ListView是上下滑动而item是左右滑动,因此会有滑动冲突,也许你需要了解下android中点击事件的派发流程,请参考Android源码分析-点击事件派发机制.我的解决思路是这样的:重写ListView的onInterceptTouchEvent方法,在move的时候做判断,如果是左右滑动就返回false,否则返

【转】高仿微信对话列表滑动删除效果--不错

原文网址:http://blog.csdn.net/singwhatiwanna/article/details/17515543 转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17515543 前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有.思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可.由于ListView是上下滑动而item是左右滑动,因

[转]大型 JavaScript 应用架构中的模式

目录 1.我是谁,以及我为什么写这个主题 2.可以用140个字概述这篇文章吗? 3.究竟什么是“大型”JavaScript应用程序? 4.让我们回顾一下当前的架构 5.想得长远一些 6.头脑风暴 7.架构提议 7.1 模块化理论 7.2 CommonJS模块 7.3 外观模式 7.4 中介者模式 7.5 应用外观 7.6 核心的抽象 7.7 整合 7.8 超越发布/订阅:自动注册事件 7.9 常见问题 13 August 2013 原文:Patterns For Large-Scale Java

sap screen design

定义屏幕: SAP 系统中的屏幕包括: 标准屏幕: 选择屏幕: 列表输出屏幕: 1. 标准屏幕必须隶属于一个类型为 L, M 或 F 的ABAP 程序, 其中需要设计的内容包括屏幕布局以及隐含在其后的流逻辑. 流逻辑则包含ABAP代码模块, 实际控制着屏幕的交互, 功能, 各事务流程(如后续屏幕设定), 当然还有设定屏幕的GUI状态, 包括菜单, 屏幕标题行和工具栏等. 2. 屏幕流逻辑分为两个基本处理块: PBO(process before output), 在向用户显示屏幕之前触发. PA

ALV详解:OO ALV

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4291373.html OO ALV.. 79 EnjoySAP Controls and CFW... 79 LVC_S_FCAT. 84 LVC_S_LAYO.. 88 set_table_for_first_dispaly()方法参数.

【 D3.js 入门系列 --- 8 】 对话操作(事件)

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 这一节介绍怎样进行对话的操作,如鼠标单击,鼠标滑过等. 对一个被选择的元素,加入对话操作,代码例如以下: .on("click", function(){ } ) 函数能够是无名函数.也能够是自定义的函数.上面代码监听的是鼠标单击的事件.但鼠标在被选择对象上单击时,就会调用函数 function . 经常使用的事件(event)有: click  : 

[软件人生]关于此次抄袭事件的一个对话

下面是今天刚刚发生的对话,了解我的人都知道,我从不造假. 一个做技术的网友  13:59:14 最近很火呀.青润  14:00:26没有,我只是被逼的.人家为了自己的利益,就污蔑我和厦大校长贪腐有关,所以拒绝接受媒体采访.我如果不说话,不就等于默认了么.一个做技术的网友  14:02:08现在的人呀,为了自己的利益,真是不择手段,抄论文的,太多了.青润  14:03:12我如果要炒作,5月18日发现的时候,不就可以开始炒作么.何必等到现在.总不能说,我发现我被抄袭了,还一句话不说.那我也太窝囊了

使用委托中介租房理解委托与事件

委托和事件,.Net Framework中的应用非常广泛,然而,较好的理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像一道门槛儿,跨过去的,觉得太容易了,而没有过去的人每次见到委托事件就觉得心慌慌,浑身不自在. 我个人还是比较喜欢用面向对象的编程思想去理解逻辑程序,理解编程.下面就用委托中介公司租房子的示例理解使用委托流程: 1.定义委托和委托对象——租房人想要租房,但是没有房源,于是委托中介找房子:2.编写要委托的方法——租房中介有房源,可以找到房子:3.将要委托的方法传递给委托

香格里拉对话——中介者模式有想法

    近日以来,亚太问题引起了世界的关注,习主席将亚太问题归结为热点敏感问题.民族宗教矛盾恐怖主义.跨国犯罪.环境安全.网络安全.能源资源安全.重大自然灾害,同时由于各国利益冲突的存在,使得亚太问题持续升温.为了响应和平发展的口号,顺应时代发展的驱使,各国代表在菲律宾召开了20104香格里拉对话,在此次对话上也让我们看到了部分国家的言行不一.搬弄是非.扩大不稳定因素等行为,让诸多代表发指.     恰巧自己刚学习了中介者模式,感觉对于这种关系很适用该模式,所以自己认真研究了一番,以下是自己代码