c语言event
Ⅰ c语言中message和event有什么区别
event一般用在线程或进程的同步,可以使用WaitSingleObject来等待。
message一般用在窗口,线程,进程之间的数据传递,使用sendmessage,
Ⅱ C语言中如何让线程等待进程执行完一部分后,线程再继续执行
#include"afxmt.h"
//全局变量
CEventevent(FALSE,TRUE);//第二个参数为TRUE表示手动信号
event.SetEvent();
//线程中要等待的地方
WaitForSingleObject(event,INFINITE)//永远等待
......//线程中的代码
event.ResetEvent();//线程挂起
//-----------------------------------------------------
//以上代码C好像不行,可以用笨办法
//定义一个全局标识变量intflag=0;
//在线程中
while(flag==0)//在主线程中改变flag的值,一旦不为0,则执行线程中的代码
{
Sleep(1);
}
......//线程要执行的功能
Ⅲ c#关于委托加了event后怎么进行输出的
看来你没有搞清楚event的意义。delegate可以理解成C语言里的指针,你可以用它来“指向”一个方法(函数)的实例。你的ProgressReport委托只是说明了它指向一个“指向参数为string,返回值为void的方法”,但是怎么用这个委托(指针),不是它的事情。
所以重点就来了,你所谓的“创建委托实例没加event修饰”这句话是不对的,有event修饰时,你创建的是一个事件,并不是一个委托实例;没有event修饰时,你创建的才是一个单纯的委托实例。换句话说,有event修饰时,你创建的是这样一个机制:你的Deg类会有一个事件(至于这个事件什么时候发生,另当别论),当事件发生成,所有注册在该事件下的方法(自然就是一大堆ProgressReport类型的方法,随你注册多少)会依次调用。所以问题的关键在于:
public event Class1.ProgressReport progress;
所表达的,是当事件progress发生时(事件发布者),会调用Class1.ProgressReport类型的所有已注册方法(事件侦听者)。所以在事件模型里,侦听者们所关心的两件事:1、发生了什么事;2、事件的具体信息,都应当由事件发布者,也就是progress来告知,事件侦听者们其实只是不同的处理方法而已,他们的参数(事件的具体信息)自然应当是由事件发布者来提供。
如果你正确理解了上面的内容,你就应当明白下面的代码(在Deg类中):
public void IWantToRaiseProgress(string msg)
{
progress.Invoke(msg);
}
这时如果你在某处调用了dg.IWantToRaiseProgress("123");
你就会看到你已注册的Instance正确工作了。
progress.Invoke就是告诉所有的事件侦听者,事件progress发生了,而且发生的内容是"123",大家快来处理吧。你的Instance方法会收到这个参数,做它自己应该做的事情。如果还有其他的事件侦听者,大家收到的情况也都一样。
Ⅳ C语言keybd_event问题。
这段代码没问题,我亲自验证过。
或者你尝试我这段代码,效果应该明显:
#include<Windows.h>
#include<stdlib.h>
#include<stdio.h>
intmain()
{
//模拟Alt+Tab
keybd_event(VK_MENU,0xb8,0,0);//Alt按下
keybd_event(VK_TAB,0x8f,0,0);//Tab按下
while(1);//停住观察
keybd_event(VK_TAB,0x8f,KEYEVENTF_KEYUP,0);//Tab释放
keybd_event(VK_MENU,0xb8,KEYEVENTF_KEYUP,0);//Alt释放
return0;
}
keybd_event函数模拟了键盘输入。调用该函数会让系统触发WM_KEYUP或者WM_KEYDOWN事件。
函数原型是:
VOIDWINAPIkeybd_event(
_In_BYTEbVk,
_In_BYTEbScan,
_In_DWORDdwFlags,
_In_ULONG_PTRdwExtraInfo
);
Ⅳ c语言中eventaers怎么用
eventaers是包含事件数据的类的基类,用于传递事件的细节。
一般在源码中是以这样的情况出现的:protected voidEventHandler(object sender, EventArgs e) 。这里的参数,前者是一个对象(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1),后面是包含事件数据的类的基类。
其实简单点说就是对象(object)sender导致了某个事件的发生,事件的内容就是(e)
在程序中的事件处理函数就是依赖实现的:
比方说你点了一个按钮,程序怎么知道应该用哪个函数来处理这个动作呢?那么EventHandler会告诉程序:"button1(sender)被点击(e)了,请调用对应的处理函数"。当然这个函数是谁,这个函数要做什么,是由你自己写的。
再深入一层,这个过程实际上就是:你的动作被windows捕获,windows把这个动作作为系统消息发送给程序(可以看message结构),程序从自己的消息队列中不断的取出消息,并在消息循环中寻找对应的处理方式,这时message结构中的类似于sender和e就起到了引导程序使用正确的处理函数的作用。
归根究底,这个sender和e及其一整套的处理方式,只不过是windows消息机制的另外一种表现罢了。
Ⅵ c语言键盘事件keybd_event
这段代码没问题,我亲自验证过。
或者你尝试我这段代码,效果应该明显:
#include<Windows.h>
#include<stdlib.h>
#include<stdio.h>
intmain()
{
//模拟Alt+Tab
keybd_event(VK_MENU,0xb8,0,0);//Alt按下
keybd_event(VK_TAB,0x8f,0,0);//Tab按下
while(1);//停住观察
keybd_event(VK_TAB,0x8f,KEYEVENTF_KEYUP,0);//Tab释放
keybd_event(VK_MENU,0xb8,KEYEVENTF_KEYUP,0);//Alt释放
return0;
}
keybd_event函数模拟了键盘输入。调用该函数会让系统触发WM_KEYUP或者WM_KEYDOWN事件。
函数原型是:
VOIDWINAPIkeybd_event(
_In_BYTEbVk,
_In_BYTEbScan,
_In_DWORDdwFlags,
_In_ULONG_PTRdwExtraInfo
);
Ⅶ c语言问题 if(!event_p){}这里的!是什么意思。如果写项目书,iutput改怎么写
在C语言中,if语句的使用格式是:if(表达式){语句组}。
其中,【表达式】需要一个关系表达式或逻辑表达式。
无论关系表达式,还是逻辑表达式,其值只能是逻辑真或逻辑假。
在C语言中,对单个数值的逻辑值做了规定:0的逻辑值为假,非0数的逻辑值为真。比如3、-5的逻辑值都是真,而0的逻辑值是假。
因此,题目中的表达式是!event_p,我们解读为:!是逻辑非的运算符,event_p是一个数值型变量,!event_p就是对变量event_p做"非"运算。
显然,当event_p的值为0时,event_p的逻辑值为假,非event_p的值变成了真。event_p==0的逻辑值也是真。
自然,当event_p不等于0时,!event_p的值是假,event_p==0的值也是假。
可以看出,逻辑表达式“!event_p”与“event_p==0”是完全相等的。
所以,有时候把“event_p==0”简写为“!event_p”。
如果你还理解不了“!event_p”的含义,你就把它替换成“event_p==0”就好理解啦!
第二个问题:如果写项目书,input改怎么写?
没有明白你的意思。能说得更详细、更具体一点吗?
Ⅷ visual studio 2010, 编写C语言, 为什么输入“event“,这个单词怎么会变蓝呢他也不是关键字啊,如图
event有许多语言保留使用的,遇到这种情况还是另起个名字吧,或者修改其中某字母为大写的来用,省得遇到问题。
Ⅸ c语言编程求解释
#include<stdio.h>
int main() //主函数
{
int sum,n;
int even(int n); //声明函数event
sum=0;
do{
scanf("%d",&n);
if(even(n)==0)
sum=sum+n; //如果是奇数,就全部加起来
}
while(n>0); //循环,知道输入的数小于0结束
printf("%d",sum);
return 0;
}
int even(int n) //定义函数event,偶数返回1,奇数返回0
{
if(n%2)
return 0;
else
return 1;
}
Ⅹ C/C++程序中的event该如何理解
c c++并没有event功能。
不过一些事件循环框架 例如windows 的核心库和qt这类是有event的。 还有很多项目也用到event这个概念,这个玩意就是设计上的一个概念, 一般来说是用来降低耦合的, 比如我写了一个模块用来做IO, 成功后会发一个event, coordinator收到这个event会调用其他业务逻辑模块来做一些操作。 这种设计在C语言项目中比较多, 因为C语言的项目层次结构一般比较散比较平, 不太好做成层次结构, 需要消息队列这类手段来协调各种功能。