㈠ c#怎麼用多線程表現消息提醒框
呵呵,在線程的回調函數裡面加上以下幾句
ThreadStart ts = delegate { MessageBox.Show("dbxiaoqiang"); };
control.BeginInvoke(ts);
control對象為任意一個Control類型的對象
不要用Invoke,如果此時你的主線程已經填出MessageBox,就會發生死鎖
㈡ C/S架構下,關於線程之間通訊的問題(C#語言)。
通訊中應該有TimeOut這樣的設置,默認會是一個可以接受的值,就是不能讓使用者等太久。你可以把這個值設大一點,這樣Debug就不會有問題了。
但是伺服器端和客戶端應該不需要考慮這個問題,你Debug伺服器端時,客戶端的處理並不影響伺服器端的代碼。一個返回值,完全可以手動在客戶端改一下,來測試客戶端的處理是否正確。
㈢ C#多線程間如何傳遞消息方便些
顯示出來的可以認為是主線程,其他多個線程要調用或者修改主線程的控制項,最好用消息傳遞來做。
如果不用消息簡單弄下就加上下面這句
Control. = false;
就OK了。不過這樣是不安全的喔~
㈣ 線程之間的通信例子 求一個WINDOWS下多線程間通信的例子,用c語言編寫!
#include
<stdio.h>
int
main(int
argc,
char
**argv){
CreateThread(NULL,
0,
thread2,
this,
0,
0);
printf("主線程正在執行!\n");
return
0;
}
void
thread2(){
sleep(2);//睡2毫秒
printf("第二個線程在運行!\n");
}
這個例子可能很簡單,但能說明問題了。
㈤ c++,子線程如何通知主線程其處理結果
你設置一個標志。當滿足時,標志更改一個值。你用Timer實時監控
㈥ 用objective-c語言實現一個消息中心(NSnotificationcenter)功能
對象之間進行通信最基本的方式就是消息傳遞,在Cocoa中提供Notification Center機制來完成這一任務。其主要作用就是負責在任意兩個對象之間進行通信。使用方法很簡單,如下幾個步驟即可:
假設A與B之間進行通信,B來觸發事件,A接受該事件,並作出響應。
1) A編寫自定義的消息響應函數update
2) A向消息中心注冊,[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(update) name:@"update" object:nil]
3) B觸發事件[[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:nil]
每一個進程都有一個默認的NSNotificationCenter,可以通過類方法defaultCenter獲取該消息中心的實例。消息中心可以處理同一進程中不同對象之間的消息。如果要在同一台機器上進行進程間的通信,需要使用。
消息中心以同步的方式將消息分發到所有的觀察者中,換言之,直到所有的觀察者都收到消息並處理完畢以後,控制權才會回到調用者的手裡。如果需要非同步的處理消息,需要使用通知隊列NSNotificationQueue。
在多線程程序中,通知會被分發到每一個發起消息的線程中,這可能與觀察者注冊時所在的線程已經不是同一線程。
實例:
@implementation TestClass
- (void) dealloc
{
// If you don't remove yourself as an observer, the Notification Center
// will continue to try and send notification objects to the deallocated
// object.
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
- (id) init
{
self = [super init];
if (!self) return nil;
// Add this instance of TestClass as an observer of the TestNotification.
// We tell the notification center to inform us of "TestNotification"
// notifications using the receiveTestNotification: selector. By
// specifying object:nil, we tell the notification center that we are not
// interested in who posted the notification. If you provided an actual
// object rather than nil, the notification center will only notify you
// when the notification was posted by that particular object.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveTestNotification:)
name:@"TestNotification"
object:nil];
return self;
}
- (void) receiveTestNotification:(NSNotification *) notification
{
// [notification name] should always be @"TestNotification"
// unless you use this method for observation of other notifications
// as well.
if ([[notification name] isEqualToString:@"TestNotification"])
NSLog (@"Successfully received the test notification!");
}
@end
㈦ 怎麼實現子線程與主線程間的消息傳遞
如何實現子線程與主線程間的消息傳遞
www.MyException.Cn 網友分享於:2013-07-10 瀏覽:150次
怎麼實現子線程與主線程間的消息傳遞
小弟最近新接觸C++,現在有這樣一種需求,就是子線程中運行一個while死循環,每執行完一次while循環,給主線程發一消息(event?),主線程接收消息後,執行一段消息響應函數,子線程和主線程函數分別在兩個不同的類中.
即類A為主線程,主線程中打開一個子線程,線程函數為類B中的函數funB,funB給類A發消息後,在主線程中執行類A中的響應函數funA.請問在類A和B中代碼分別應該怎麼寫……謝謝!
分享到:
------解決方案--------------------
如是窗口程序,讓子線程向主線程創建的窗口發自定義消息,用SendMessage(子線程會待主線程處理完畢)或PostMessage(子線程發送消息後就繼續自己的事)。
如果不是窗口程序,就必需讓主線程輪詢,可以用一個flag,子線程設置flag,主線程定期檢查flag,如果被置位,則進行相應處理並將flag復位。flag用臨界區保護,這種方法除了在兩個線程同時入臨界區時以外,主線程不會被阻塞。當然也可以用Event,子線程SetEvent,主線程定期WaitForSingleObject,把超時設為1。如果子線程需要等待主線程的處理,就再加一個Event,子線程設置flag/觸發Event1之後等特第二個Event,主線程處理完畢後觸發第二個Event。
參見MSDN:
SendMessage
PostMessage
InitializeCriticalSectionEx
EnterCriticalSection
LeaveCriticalSection
CreateEventEx
OpenEvent
SetEvent
PulseEvent
ResetEvent
㈧ 線程間通信,定時向線程發送消息,C++實現
用WaitForSingleObject() WaitForMultileObject() \//等待函數
EnterCrticalSection() //臨界區系列函數
CreateMutext() //互斥鎖相關的函數
CreateSeaphore()//信號量等函數..
你用 那幾個Message的函數是不行的.. 其實關鍵的問題就是windows上的線程同步問題,你可以搜索一下相關內容,或者參考 Windows核心編程 關注 0x30 網路貼吧,關注Windows程序設計.
㈨ c語言中,創建的子線程如何給主線程發消息
自己定義的信號,你要emit newOprMsg(unsigned int msg);
才行
不知道你emit了沒~~
子線程的run()里,你好賴也得加個exec()吧,要不無事件循環,制能收到你的signal?
㈩ 線程間通信方式有哪些
多線程通信的方法主要有以下三種:
1.全局變數
進程中的線程間內存共享,這是比較常用的通信方式和交互方式。
註:定義全局變數時最好使用volatile來定義,以防編譯器對此變數進行優化。
2.Message消息機制
常用的Message通信的介面主要有兩個:PostMessage和PostThreadMessage,
PostMessage為線程向主窗口發送消息。而PostThreadMessage是任意兩個線程之間的通信介面。
2.1.PostMessage()
函數原型:
B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
參數:
hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含義的兩個值:
HWND.BROADCAST:消息被寄送到系統的所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口
和彈出式窗口。消息不被寄送到子窗口。
NULL:此函數的操作和調用參數dwThread設置為當前線程的標識符PostThreadMessage函數一樣。
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
IParam:指定附加的消息特定的信息。
返回值:如果函數調用成功,返回非零值:如果函數調用失敗,返回值是零。
MS還提供了SendMessage方法進行消息間通訊,SendMessage(),他和PostMessage的區別是:
SendMessage是同步的,而PostMessage是非同步的。SendMessage必須等發送的消息執行之後,才返回。
2.2.PostThreadMessage()
PostThreadMessage方法可以將消息發送到指定線程。
函數原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);
參數除了ThreadId之外,基本和PostMessage相同。
目標線程通過GetMessage()方法來接受消息。
註:使用這個方法時,目標線程必須已經有自己的消息隊列。否則會返回ERROR_INVALID_THREAD_ID錯誤。可以用
PeekMessage()給線程創建消息隊列。
3.CEvent對象
CEvent為MFC中的一個對象,可以通過對CEvent的觸發狀態進行改變,從而實現線程間的通信和同步。