首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Task之消息队列示例

Task之消息队列示例

作者头像
Taishan3721
发布2021-11-04 10:29:38
2980
发布2021-11-04 10:29:38
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

欢迎关注VxWorks567

如转发 请标明出处!

分享一段代码,适合初学者

/*
 * 公众号  VxWorks567
 */
#include <stdio.h>
#include <taskLib.h>
#include <msgQLib.h>

#define CONSUMER_TASK_PRI         102
#define PRODUCER_TASK_PRI         101
#define TASK_STACK_SIZE          5000
#define MSG_NUM                    10
struct msg
    {
    int tid;      
    int value;
    };
static void producerTask(MSG_Q_ID msgQId)
{
    struct msg producedItem;
    int count;

    printf("\n%s started\n", taskName(0));

    for(count = 1; count <= MSG_NUM; count++)
        {
        producedItem.tid = taskIdSelf();
        producedItem.value = count * 10;

        if((msgQSend(msgQId, (char *)&producedItem, sizeof(producedItem), WAIT_FOREVER, MSG_PRI_NORMAL)) == ERROR)
            {
            printf("Error in sending the message");
            return;
            }
        else
            printf("%s: produced msg %d \n", taskName(0), producedItem.value);
        }
    return;
    }

static void consumerTask(MSG_Q_ID msgQId)
{
    struct msg consumedItem;
    int count;

    printf("\n%s: Started\n", taskName(0));

    for(count = 1; count <= MSG_NUM; count++)
        {
        if((msgQReceive(msgQId, (char *) &consumedItem, sizeof(consumedItem), WAIT_FOREVER)) == ERROR)
            {
            printf("Error in receiving the message");
            return;
            }
        else 
            printf("%s: Consuming msg %d\n", taskName(0), consumedItem.value);
        }

    msgQDelete(msgQId);
    return;
    }

void testTaskMsgQ()
{
    MSG_Q_ID msgQId = msgQCreate(MSG_NUM, sizeof(struct msg), MSG_Q_FIFO);

    taskSpawn("tProducerTask", PRODUCER_TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR)producerTask, (int)msgQId, 0, 0, 0, 0, 0, 0, 0, 0, 0);

    taskSpawn("tConsumerTask", CONSUMER_TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR)consumerTask, (int)msgQId, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    return;
    }

下载地址

https://pan.baidu.com/s/1CskUTsGYrTyVAJmZ4JEyNQ

提取码:m9yi

有问题的话,先动手试一试

这正是

内部数据要传递 互斥同步多考虑

消息队列最常用 轻松使用看示例

我是泰山 专注VX好多年!

一起学习 共同进步!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列
腾讯云消息队列 TDMQ 是分布式架构中的重要组件,提供异步通信的基础能力,通过应用解耦降低系统复杂度,提升系统可用性和可扩展性。TDMQ 产品系列提供丰富的产品形态,包含 CKafka、RocketMQ、RabbitMQ、Pulsar、CMQ 五大产品,覆盖在线和离线场景,满足金融、互联网、教育、物流、能源等不同行业和场景的需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档