QNX系列 五 資源管理器(3)簡單的例子

2021-10-11 21:03:12 字數 4113 閱讀 8713

資源管理器主要是解決多工不阻塞的問題,系統提供封裝好的函式給使用者使用。在系統中伺服器可以在不阻塞的條件下進行訊號的接收並且進行資料處理工作。

這兩個歷程表示了大部分程式中的邏輯,比較重要的點總結如下:

解決了阻塞問題之後,伺服器可以不斷的接受訊號並進行處理。

#include 

#include

#include

#include

#include

#include /*for _io_max*/

#include /* for prot_read and so on*/

#include /*for o_rdwr and so on*/

#include

#include /**

****

****

****

****

**#include "../jincheng2/msgtype.h"

int fd_detector;

int main();

msg.

type

= _io_max +2;

msgsend(fd_detector,

&msg,sizeof(msg)

,&replied,sizeof(replied));

printf(

"procl is end\n");

sleep(1)

;//這邊寫乙個d1的陣列進去,那邊的快取區就可以收到了

//真神奇

write(fd_detector,d1,sizeof(short)

*100);

count++;

if(count==10)

}}

這裡的write函式呼叫了伺服器程序中的資源管理器的io層的函式,並進行處理,該函式支援自己定義。

#include 

#include

#include

#include

#include

#include

#include

#include

#include //for o_rdwr and so on

#include // for prot_read and so on

#include"msgtype.h"

int io_write (resmgr_context_t *ctp, io_write_t *msg, resmgr_ocb_t *ocb)

;static resmgr_connect_funcs_t connectfuncs;

static resmgr_io_funcs_t iofuncs;

static iofunc_attr_t iofuncattr;

int fd_sys_stat;

//char *buf;

short buf[

108]

;int replied;

//這個io_write函式是用來做什麼的?

//沒看出來有什麼用。

int io_write (resmgr_context_t *ctp, io_write_t *msg, resmgr_ocb_t *ocb)

int message_callback( message_context_t *ctp,

inttype

, unsigned flags, void *handle )

return0;

}int main(

int argc, char **ar** )

// thread_pool_attr_t pool_attr;

resmgr_attr_t resmgr_attr;

message_attr_t message_attr;

dispatch_t ****;

thread_pool_t *tpp;

int resmgr_id, message_id;

/* create the dispatch inte***ce 建立乙個排程介面*

/ *** = dispatch_create();

if( *** == null )

memset(

&resmgr_attr,

0, sizeof( resmgr_attr ));

//為開闢的記憶體設定乙個值

resmgr_attr.nparts_max =1;

resmgr_attr.msg_max_size =

2048;/

* setup the default i/o functions to handle open

/read/write/..

.*/ iofunc_func_init( _resmgr_connect_nfuncs,

&connectfuncs,

_resmgr_io_nfuncs,

&iofuncs )

; iofuncs.write = io_write;

//自己定義的函式,用來做write

/* setup the attribute for the entry in the filesystem *

/ iofunc_attr_init(

&iofuncattr, s_ifnam |

0666,0

,0);

//最重要的就是這個名字,有了這個名字之後就可以確定是哪乙個資源了,實際上也是乙個檔案?

resmgr_id = resmgr_attach( ***,

&resmgr_attr, name, _ftype_any,0,

&connectfuncs,

&iofuncs,

&iofuncattr );if

( resmgr_id ==-1

)/* setup our message callback *

/ memset(

&message_attr,

0, sizeof( message_attr ));

message_attr.nparts_max =1;

message_attr.msg_max_size =

4096

; printf(

"1---->here is the test\n");

/* attach a callback (handler)

for two message types *

/ message_id = message_attach( ***,

&message_attr, _io_max +

1, _io_max +

100, message_callback, null );if

( message_id ==-1

) memset(

&pool_attr,

0, sizeof pool_attr)

; pool_attr.handle = ***;

pool_attr.context_alloc =dispatch_context_alloc;

pool_attr.block_func =dispatch_block;

pool_attr.handler_func =dispatch_handler;

pool_attr.context_free =dispatch_context_free;

pool_attr.lo_water =2;

pool_attr.hi_water =4;

pool_attr.increment =1;

pool_attr.maximum =50;

//建立執行緒池

if((tpp = thread_pool_create(

&pool_attr, pool_flag_exit_self)

)== null)

thread_pool_start(tpp)

;//開啟執行緒池

return exit_success;

}

這是乙個比較簡單的資源管理器。

簡單資源管理器

下面共享乙個我自己的資源管理器,很簡單的,看起來也明白,主要是我是新手,不想寫的太複雜,自己專案使用的好用,便是最好的。using unityengine using system.collections using system.collections.generic using system p...

資源管理器

using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace day 09 小型資源管理器 檔案長度 public st...

Windows資源管理器

在資源管理器中,選定多個非連續檔案的操作為 a 按住shift鍵,單擊每乙個要選定的檔案圖示 b 按住ctrl鍵,單擊每乙個要選定的檔案圖示 c 先選中第乙個檔案,按住shift鍵,再單擊最後乙個要選定的檔案圖示 d 先選中第乙個檔案,按住ctrl鍵,再單擊最後乙個要選定的檔案圖示 檔案abc.bm...