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語言的項目層次結構一般比較散比較平, 不太好做成層次結構, 需要消息隊列這類手段來協調各種功能。