当前位置:首页 » 编程语言 » 线程之间消息通知c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

线程之间消息通知c语言

发布时间: 2022-05-10 19:41:32

㈠ 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的触发状态进行改变,从而实现线程间的通信和同步。