首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GetMessage()会在主消息循环中返回-1吗?

GetMessage()函数是Windows操作系统中的一个函数,用于从消息队列中获取消息。它的返回值是一个布尔值,表示是否成功获取到消息。

在主消息循环中,GetMessage()函数通常不会返回-1。它会一直阻塞等待,直到有消息到达消息队列,然后将消息复制到指定的消息结构体中,并返回一个非零值表示成功获取到消息。

然而,有一种情况下GetMessage()函数可能返回-1,即在发生错误时。例如,如果传递给GetMessage()函数的参数无效,或者发生了内存分配错误等情况,函数可能会返回-1。

需要注意的是,GetMessage()函数的返回值不代表消息的内容,而仅仅表示是否成功获取到消息。要获取消息的具体内容,需要通过消息结构体中的成员变量来获取,如消息的类型、参数等。

在云计算领域中,GetMessage()函数并不是一个常用的概念或技术。云计算更关注于资源的虚拟化、弹性扩展、高可用性等方面,与消息处理相关的技术更多地涉及到消息队列服务、消息中间件等。

腾讯云提供了一款消息队列服务产品,名为腾讯云消息队列 CMQ(Cloud Message Queue),它可以帮助用户实现高可靠、高可用、高并发的消息通信。CMQ支持多种消息协议,包括HTTP、HTTPS、SDK等,适用于各种场景,如在线游戏、社交网络、电商平台等。

更多关于腾讯云消息队列 CMQ的信息,可以访问以下链接:

https://cloud.tencent.com/product/cmq

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入浅出MFC学习笔记1_GetMessage、PeekMessage、TranslateMessage、DispachMessage等等用法 消息环中的TranslateMessage函数和Dis

备注:和函数GetMessage不一样的是,函数PeekMesssge在返回前不等待消息被放到队列里。...如果hWnd为C1,PeekMessage只返回hWnd值为NULL的消息,该消息由函数PostThreadMessage寄送。...消息环中的TranslateMessage函数和DispatchMessage函数 TranslateMessage函数 函数功能描述:将虚拟键消息转换为字符消息。...,让 线程中等待用户输入,产生不同的消息,并把这些消息post给 子线程,子线程根据产生的消息做出不同的反映。...GetMessage函数只有在消息队列中有消息返回,队列中无消息就会一直等,直至下一个消息出现时才返回。在等的这段时间,应用程序不能执行任何指令。

78710
  • Windows窗口消息消息队列

    消息队列 所有基于事件驱动的操作系统中的GUI程序,都会在主线程中运行一个消息泵来从消息队列中取出消息并执行对应的处理逻辑。...,由于没有窗口回调过程(WndCallback)会处理,因此需要在消息环中处理发送给线程的消息。...这个函数不会使发送线程进入阻塞,也不会在本线程中加入应答消息. 5.应答一个消息 我们都知道在不同线程之间发送消息时,发送线程一旦检测到本线程的应答消息队列中有消息时就会返回,而函数: BOOL ReplyMessage...,若函数检测到QS_QUIT标志则返回FALSE, 否则返回TRUE,函数调用失败返回-1 typedef struct tagMSG { HWND hwnd; UINT...PeekMessage和GetMessage会在内部处理完线程的所有发送消息队列中的消息 12.等待消息 BOOL WaitMessage(VOID); 当调用这个函数后线程将会挂起,直到线程的消息队列中有消息时线程才会恢复执行

    2.6K50

    【CC++】回调函数详解&注册窗口类&LRESULT & CALLBACK详解以及游戏中的应用

    投递一个消息的含义是将消息放到队列中,然后应用程序会在消息环中调用 GetMessage 和 DispathMessage 函数获取分发消息。 Sending a message。...GetMessage 和 PeekMessage 前面讲到 GetMessage 会堵塞执行直到消息队列中有新的消息插入。...如果在游戏循环中调用 GetMessage 的时候正好消息队列为空就会导致下面的游戏逻辑不能及时执行。而游戏程序恰好对实时性要求极高,这就会造成游戏运行时期画面卡顿的现象。...为了解决这个问题,游戏程序中一般使用 PeekMessage 函数替代 GetMessage 函数,二者的功能几乎一致,唯一的差别是 PeekMessage 不管消息队列中有没有消息都会立刻返回,也就解决了刚刚提到的更新不及时和不更新卡顿假死问题...在你的应用程序中,典型的响应 WM_DESTORY 消息的代码是调用 PostQuitMessage 函数。

    1.6K21

    WPF 的 Dispatcher 为什么要创建一个隐藏窗口?

    然而,试问这个问题: 一定需要此隐藏窗口消息循环不一定需要窗口来参与啊!没有窗口,消息循环依旧能持续进行并处理消息。...因此,如果收件人线程处于模式循环中, (MessageBox 或 DialogBox) ,则消息将丢失。 若要在模式循环中截获线程消息,请使用特定于线程的挂钩。...// 消息循环 while( (bRet = GetMessage( &msg, NULL, 0, 0 )) !...而开发者们为什么要自己去开消息循环呢?这不就是众所周知的“模态”???弹模态对话框的本质就是开了一个新的消息循环处理消息的同时,阻塞原来的消息循环。...由于内外层的消息循环都是调用的 GetMessage 函数取得消息,内层的消息循环退出后,对于外层消息循环来说消息已经被消费了,再也回不来了,这不就是丢失了吗?!

    27020

    正確使用 SetCapture ReleaseCapture 「建议收藏」

    只要在DefWindowProc()響應WM_NCHITTEST消息返回HTCLIENT,就可以達到這種效果,但是這樣環就不工作了,就好像是你在拖拽著它的標題欄一樣。...這樣做,程序的環可以一直在運作。這樣的窗口移動功能需要捕獲鼠標,那時因為如果你按下了鼠標左鍵,然後把鼠標從客戶區猛地拉到外面去,窗口仍然要能夠接收到WM_MOUSEMOVE消息。...編譯運行我給出的代碼,在拖拽窗口客戶區的過程中,使用ALT+TAB按鍵將一個大些的窗口提到前面,這樣示例程序的窗口就會全部被蓋住。...CreateMainWnd()) return -1; ShowWindow(g_hMainWnd, SW_SHOW); UpdateWindow(g_hMainWnd); MSG msg;...while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return

    48310

    深入理解 JavaScript 回调函数

    如果我们尝试在单线程事件循环中执行长时间运行的操作,则会阻止该过程。从技术上讲这是不好的,因为过程在等待操作完成时会停止处理其他事件。...获取并显示消息的函数 在上面的代码片段中,首先执行 getMessage()函数,然后执行 displayMessage() 。两者都在浏览器的控制台窗口中显示了一条消息,并且都立即执行。...该函数会暂停两秒钟,然后在控制台窗口中显示消息“ Hi,there”。 “显示的消息”将被显示在浏览器的控制台窗口中。在这种情况下,首先,我们需要等待 getMessage() 函数。...注意,当调用 getMessage() 函数时,我们仅将其引用传给 displayMessage() 函数。这就是为什么你不会在它旁边看到函数调用运算符,也就是() 符号。...Javascript 回调是异步的? JavaScript 被认为是单线程脚本语言。单线程是指 JavaScript 一次执行一个代码块。

    1.7K20

    异步,同步,阻塞,非阻塞程序的实现

    同步,异步 异步同步的差异,在于当线程调用函数的时候,线程获取消息的方式. 如果是同步,线程会等待接受函数的返回值(或者轮函数结果,直到查出它的返回状态和返回值)。...此时,函数一般会立即返回状态,而不是等待求值。以免阻塞住线程。 他们没有关系 异步同步和阻塞非阻塞没有什么本质关联。一个讲的是消息方式,一个讲的是线程状态。...for task in tasks: try: next(task[1]) # 不断的轮每个生成器关连的timer。...上面的代码中,在一个while循环中timer的状态。由于timer存在于wait中。所以需要把timer“提取”出来。...1. 把timer 从生存器gen yield返回出来 2. 轮timer的状态(实质是切换进出timer,看它有没有引发StopIteration异常) 3.

    7.6K10

    一站式WPF--线程模型和Dispatcher

    (主线程)进入GetMessage循环,取得消息后调用DispatchMessage分发消息。   ...这里的GetMessage循环就是所谓的消息泵,它像水泵一样源源不断的从线程的消息队列中取得消息,然后调用DispatchMessage把消息分发到各个窗口,交给窗口的WndProc去处理。   ...应用程序主线程处于GetMessage环中,每次调用GetMessage获取一个消息,如果线程的消息队列为空,则线程会被挂起,直到线程消息队列存在消息线程会被重新激活。...Dispatcher的新意   在Winform的消息环中, 为了线程安全,调用Control的Invoke或者BeginInvoke方法可以在创建控件的线程上执行委托,方法的返回值分别为object...程序启动时默认的主线程就是UI线程,它在调用Application.Run(也就是Dispatcher.Run)之后进入了一个GetMessage的循环中,对Window消息进行响应并构建执行一个个的DispatcherOperation

    26620

    一站式WPF--线程模型和Dispatcher

    (主线程)进入GetMessage循环,取得消息后调用DispatchMessage分发消息。   ...这里的GetMessage循环就是所谓的消息泵,它像水泵一样源源不断的从线程的消息队列中取得消息,然后调用DispatchMessage把消息分发到各个窗口,交给窗口的WndProc去处理。   ...应用程序主线程处于GetMessage环中,每次调用GetMessage获取一个消息,如果线程的消息队列为空,则线程会被挂起,直到线程消息队列存在消息线程会被重新激活。...Dispatcher的新意   在Winform的消息环中, 为了线程安全,调用Control的Invoke或者BeginInvoke方法可以在创建控件的线程上执行委托,方法的返回值分别为object...程序启动时默认的主线程就是UI线程,它在调用Application.Run(也就是Dispatcher.Run)之后进入了一个GetMessage的循环中,对Window消息进行响应并构建执行一个个的DispatcherOperation

    29911

    getcomponent_getsocketopt

    如果函数取得WM_QUIT消息返回值是零。如果出现了错误,返回值是-1。例如,当hWnd是无效的窗口句柄或lpMsg是无效的指针时。...若想获得更多的错误信息,请调用GetLastError函数 补充: 应用程序通常用返回值来确定是否终止消息循环并退出程序。...注意,此函数的返回值可非零、零或-1,应避免如下代码出现: while(GetMessage(IpMsg,hwnd,0,0))… -1返回值的可能性表示这样的代码会导致致命的应用程序错误。...如果hWnd为-1,PeekMessage只返回hWnd值为NULL的消息,该消息由函数PostThreadMessage寄送。...在vs中输入float,然后按F1键,会在默认浏览器上打开帮助文档。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

    41010

    android异步消息机制 源码层面彻底解析(1

    new RuntimeException( this + " sendMessageAtTime() called with no mQueue"); Log.w("Looper", e.getMessage...queue.next()方法的作用就是从消息队列中取msg,唯一跳出循环的方式是MessageQueen的next方法返回了null。...如果我们采用无参的构造函数创建handler,msg.callback与mCallback均为空,所以我们会调用handleMessage(msg),这样文章开头的那个实例整个流程就走完了,handleMessage(msg)会在...private static void handleCallback(Message message) { message.callback.run(); } 总结 梳理整个执行过程 1....3.调用Looper.loop()方法在死循环中执行Message msg = queue.next(),不断的将msg从消息队列中取出来,同时执行msg.target.dispatchMessage(

    27731

    Java代码评审歪诗!让你写出更加优秀的代码!

    贾言 代码评审歪诗 窗外风雪再大 也有我陪伴着你 全文字数:2000字 阅读时间:5分钟 贾言 代码评审歪诗 验幻空越重 命频异长 依轮线日简 接偶正分壮 架构师说, 用20个字描述代码评审的内容..., 返回值验证注解约束提供方按注解要求返回参数。...-勋 不要在循环中调用服务,不要在循环中做数据库等跨网络操作; 频-品 写每一个方法时都要知道这个方法的调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高的一定要考虑性能指标,考虑是否会打垮数据库...典型示例做法1: ? 典型示例做法2: ? 做法2的好处是将不同类型的逻辑解耦,各自发展,不会相互影响,如果添加类型也不必影响现有类型逻辑。...但是mq解耦的方式不能滥用,在同一系统内不宜过多使用mq消息来做异步,要尽可能保证接口的性能,而不是通过mq防止出问题后重新消费。

    5.4K20

    Kafka消费者的使用和原理

    我们继续看上面的代码,第3步,subscribe订阅期望消费的主题,然后进入第4步,轮调用poll方法从Kafka服务器拉取消息。...而消息者在每次消费消息时都将会将偏移量进行提交,提交的偏移量为下次消费的位置,例如本次消费的偏移量为x,则提交的是x+1。 ?...若未来得及提交,也会造成重复消费,如果还想更进一步减少重复消费,可以在for循环中为commitAsync和commitSync传入分区和偏移量,进行更细粒度的提交,例如每1000条消息我们提交一次:...然后进入do-while循环,如果没有拉取到消息,将在不超时的情况下一直轮。...如果没有消息则使用Fetcher准备拉取请求然后再通过ConsumerNetworkClient发送请求,最后返回消息

    4.5K10

    Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑

    ,这个只是我们自己知道我们定义了一个新的窗口过程但是系统并不知道我们,系统中有一个专门的表用来存储系统中各个窗口类的信息,注册窗口类实际上是将我们填写的窗口类的信息添加到系统的这个表中,以后创建时系统会在这个表中查找相应的窗口类...答:上面说过,系统中有一个专门用于管理各个窗口类的表,在调用CreateWindow函数时会首先在表中查找是否有这个类,没有的话就返回出错,并不会在我们所定义的窗口类结构体变量的内存中查找,通过这一点我们可以知道其实对于所有的窗口类只需要使用一个结构体变量来创建所有的窗口类...问题五、在消息环中GetMessage和Dispatchmessage各有什么作用,为什么一个应用程序只需要一个消息环而不是每个窗口一个消息环?...,这是由GetMessage完成,取出后根据MSG中的HWND参数确定是哪个窗口的消息,从而发送到相依的窗口过程中。...每个应用程序只有一个消息环,而取出消息和将消息分配到对应的窗口过程都争对的这一个消息队列自然没有必要写多个消息环 问题六、系统是如何根据窗口句柄找到相应的窗口过程的?

    56730
    领券