当前位置: 首页 > news >正文

学网站设计/免费发布信息网站大全

学网站设计,免费发布信息网站大全,专做自驾游的网站,做不做我女朋友的网站DirectFB采用了主从模型(Master/Slave)。Fusion即融合,多个应用程序在不同的进程空间,通过这个内核模块通信,在这里,一切都溶为一体了。Master应用程序负责初始化一个称为竞技场的东西,其它Slave应用程序可以加入或者退…

        DirectFB采用了主从模型(Master/Slave)。Fusion即融合,多个应用程序在不同的进程空间,通过这个内核模块通信,在这里,一切都溶为一体了。Master应用程序负责初始化一个称为竞技场的东西,其它Slave应用程序可以加入或者退出竞技场。当Master退出时,则其它所有Slave都必须退出。

      我们先实现fusion master,文件名为fusionee_master.c.

      该程序将创建一个功能较简单的进程。这个进程将负责初始化竞技场(即arena),分配共享内存,并通过该竞技场发布一个指针。这些步骤是非常直接了当的:

     (1 )初始化fusion world;

      (  2 )  初始化共享内存池。

      ( 3 )初始化一个新的竞技场。

     (4)在共享内存池里为我们的数据分配空间;

      ( 5 )填充数据到上述分配的内存空间;

     (6)在这个全新的竞技场里发布一个指针;

      关闭竞技场时,我们按照如下步骤来进行:

     (1)获取指向共享内存的一个指针;

     (2)释放内存;

     (3)退出竞技场;

     (4)释放共享内存池;

     (5)退出fusion world.

Fusionee_master.c    

 

#include<stdio.h>
#include <unistd.h>
#include <stdbool.h>
#include <linux/fusion.h>
#include <fusion/fusion.h>
#include <fusion/shmalloc.h>
#include <fusion/call.h>
#include <fusion/arena.h>
                        
// ABI version for sanity check

#define DFB_ABI 70
 
enum {
   NEW_WORLD = -1,
   EXISTING_WORLD
} FusionWorldType;

// Shared memory pool size

#define SHM_POOL_SIZE 0x1000000

FusionWorld *world;
FusionSHMPoolShared *pool;

/*
 * Callback function called from fusion_arena_enter()
 * Add here all variables that live in shared memory
 */

int initialize(FusionArena*arena,void*ctx){
   char *str=NULL;

   printf("\t\t\tAllocate SHM for field in Arena (%s)\n",__FUNCTION__);
   str = (char*)SHMALLOC(pool, 1024);//  (4)在共享内存池里为我们的数据分配空间;
   sprintf(str,"String in Arena!!!");//(5)填充数据到上述分配的内存空间;
   fusion_arena_add_shared_field(arena,"string1",(void*)str);//(6)在这个全新的竞技场里发布一个指针;
   printf("\t\t\tThe string is shared? ");
   fusion_is_shared(world, str)?printf("Yes"):printf("No");
   printf(" (%s)\n",__FUNCTION__);

   return 0;
}

/*
 * Callback function called from fusion_arena_exit()
 */

int shutdown(FusionArena*arena,void*ctx,bool emergency){
   char *str=NULL;

   fusion_arena_get_shared_field(arena,"string1",(void*)&str);

   printf("\n\t\t\tFree shared memory (%s)\n\n",__FUNCTION__);
   SHFREE(pool, str);

   return 0;
}

int main (){
   int ret;
   char c;
   void *ctx;
   FusionArena *arena;

   printf("Creating Fusion world (%s)\n",__FUNCTION__);
   fusion_enter(NEW_WORLD, DFB_ABI, FER_MASTER,&world);//--(1)创建一个fusion world.
   printf("Fusion world created with index %d (%s)\n",
       fusion_world_index(world),__FUNCTION__);
   printf("Is this the master? ");
   fusion_master(world)?printf("Yes"):printf("No");
   printf(" (%s)\n",__FUNCTION__);

   printf("\tCreating SHM pool (%s)\n",__FUNCTION__);
   fusion_shm_pool_create(world,"WM SHM pool", SHM_POOL_SIZE, 0,&pool);// (  2 )  初始化共享内存池。

   printf("\t\tCreating Arena (%s)\n",__FUNCTION__);
   fusion_arena_enter(world,"WM Arena", initialize,NULL,&ctx,&arena,&ret);//   ( 3 )初始化一个新的竞技场。


   printf("\n\t\tPress enter to exit (%s)\n",__FUNCTION__);
   read(1,&c, 1);


   printf("\t\tShutting down Arena (%s)\n",__FUNCTION__);
   fusion_arena_exit(arena,shutdown,NULL,&ctx, 0,&ret);

   printf("\tDestroying SHM pool (%s)\n",__FUNCTION__);
   fusion_shm_pool_destroy(world, pool);

   printf("Exiting Fusion world (%s)\n",__FUNCTION__);
   fusion_exit(world, 0);

   return 0;
}

ok,到此为止,我们可以进入竞技场,获取共享内存。现在,我们来写一个小程序来获取共享内存的内容。我们将按如下步骤进行:

    (1)进入fusion world.

     ( 2 )使用join callback访问竞技场。

    (3)获取指向共享内存的指针。

    (4)使用leave callback 离开竞技场;

    (5)离开fusion world.

 

fusionee_slave.c

 

#include<stdio.h>
#include <unistd.h>
#include <linux/fusion.h>
#include <fusion/fusion.h>
#include <fusion/shmalloc.h>
#include <fusion/arena.h>

// ABI version for sanity check

#define DFB_ABI 70

enum {
   NEW_WORLD = -1,
   EXISTING_WORLD
} FusionWorldType;

FusionWorld *world;

/*
 * Callback function called from fusion_arena_enter()
 */

int join(FusionArena*arena,void*ctx){
   char *str=NULL;

   printf("\t\tJoin Arena (%s)\n",__FUNCTION__);

   fusion_arena_get_shared_field(arena,"string1",(void*)&str);
   printf("\t\tString in SHM: %s\n", str);

   return 0;
}

/*
 * Callback function called from fusion_arena_exit()
 */

int leave(FusionArena*arena,void*ctx,bool emergency){
   printf("\t\tLeave Arena (%s)\n",__FUNCTION__);

   return 0;
}

int main(){
   int ret;
   char c;
   void *ctx;
   FusionArena *arena;

   printf("Join Fusion world (%s)\n",__FUNCTION__);
   fusion_enter(EXISTING_WORLD, DFB_ABI, FER_SLAVE,&world);
   printf("Fusion world joined with index: %d (%s)\n",
       fusion_world_index(world),__FUNCTION__);
   printf("Am I the master? ");
   fusion_master(world)?printf("Yes"):printf("No");
   printf(" (%s)\n",__FUNCTION__);

   printf("\tJoin Arena (%s)\n",__FUNCTION__);
   fusion_arena_enter(world,"WM Arena",NULL, join,&ctx,&arena,&ret);

   printf("\n\tPress enter to finish\n");
   read(1,&c, 1);

   printf("\tLeave Arena (%s)\n",__FUNCTION__);
   fusion_arena_exit(arena,NULL, leave,&ctx, 0,&ret);

   printf("Exit Fusion world (%s)\n",__FUNCTION__);
   fusion_exit(world, 0);

   return 0;
}

http://www.lbrq.cn/news/1058617.html

相关文章:

  • 学生为学校做网站/100条经典广告语
  • 青海做网站找谁/关键词在线听
  • 枣庄做网站/模板建站的网站
  • 自己做的影视会员网站违法么/宁波外贸网站推广优化
  • 邯郸企业做网站/百度账号是什么
  • wordpress 视频站模板/百度搜索排行
  • 社交电商平台排行榜/seo深圳培训班
  • 中华人民共和国商务部网站/seo优化服务商
  • 做淘宝网站多少钱/怎么免费做网站
  • 余姚做百度网站建设/seo专员
  • 个人网站设计的意义/长沙网站优化
  • 做网站方案怎么写/新产品如何快速推广市场
  • 租个国内服务器做网站多少钱/磁力猫torrent kitty
  • 惠民县建设网站/seo文章推广
  • 网站制作比较好的公司/广州关键词排名推广
  • 企业网站模版/一个具体网站的seo优化
  • 住房和城乡建设部网站事故快报/黑帽seo优化
  • 私密浏览器免费版的优缺点/seo竞争对手分析
  • 网络工作室可以做房产网站吗/网站首页快速收录
  • 动漫网站的设计与实现/百度下载链接
  • 二元期权网站建设/网站工具查询
  • 网站后台用什么程序做/培训计划方案
  • 做论坛网站赚钱吗/网络营销管理系统
  • 未来网站建设想法/产品推广方法有哪些
  • wordpress支持什么数据库/昆明网站seo服务
  • 毕业设计做网站怎样的工作量算达标/seo外包品牌
  • 网页制作工具的选择与网站整体风格是有关系的/5118网站如何使用免费版
  • 昆明网站建设公司电话/百度官方推广平台
  • 工商局网上注册/seo编辑招聘
  • 山东网站建设推广/百度旧版本
  • 生成式 AI 重塑自动驾驶仿真:4D 场景生成技术的突破与实践
  • 在Ansys Mechanical中对磨损进行建模
  • Kafka 是什么?
  • 使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量
  • 前端与后端部署大冒险:Java、Go、C++三剑客
  • React ahooks——副作用类hooks之useThrottleEffect