设为首页 加入收藏

TOP

structc 开源框架简介(一)
2018-10-21 16:08:41 】 浏览:118
Tags:structc 开源 框架 简介

了解

structc-https://github.com/wangzhione/structc

    structc 是 C 构建基础项目框架. 不是太惊艳, 但绝对是 C 简单项目中一股清流. 
它的前身是 simplec 框架. 

simplec - https://github.com/wangzhione/simplec

 二者相比. structc 框架更加自然. 力求贴合 C 项目开发的原始状态.  所有写的代码, 心愿就是
向着标准库, 操作系统, 编译器靠拢!
例如下面代码
#ifndef _H_THREAD
#define _H_THREAD

#include <struct.h>
#include <pthread.h>
#include <semaphore.h>

//
// pthread_run - 异步启动线程
// id       : &tid 线程id地址
// frun     : 运行的主体
// arg      : 运行参数
// return   : 返回线程构建结果, 0 is success
//
#define pthread_run(id, frun, arg)                                  \
pthread_run_((id), (node_f)(frun), (void *)(intptr_t)(arg))
inline int pthread_run_(pthread_t * id, node_f frun, void * arg) {
    return pthread_create(id, NULL, (start_f)frun, arg);
}

//
// pthread_end - 等待启动线程结束
// tid      : 线程id
// return   : void
//
inline void pthread_end(pthread_t tid) {
    pthread_join(tid, NULL);
}

//
// pthread_async - 异步启动分离线程
// frun     : 运行的主体
// arg      : 运行参数
// return   : 返回 0 is success
// 
#define pthread_async(frun, arg)                            \
pthread_async_((node_f)(frun), (void *)(intptr_t)(arg))

inline int pthread_async_(node_f frun, void * arg) {
    int ret;
    pthread_t tid;
    pthread_attr_t attr;

    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    ret = pthread_create(&tid, &attr, (start_f)frun, arg);
    pthread_attr_destroy(&attr);

    return ret;
}

#endif//_H_THREAD
有时候想问为什么喜欢用 C 写这些毫无营养的 东东. 在回答这个问题之前.

引述 golang.org 中一段代码 
// You can edit this code!
// Click here and start typing.
package main

import "fmt"

func main() {
    fmt.Println("Hello, 世界")
}
(: 说 real 的, 在写的溜语言中, 唯独 Go 很好用, 但 * 真丑.)

猜测可能还是, C 有点意思 ~ 

借 - https://y.qq.com/n/yqq/song/002WLDmw0vkHtC.html

曾经多少个夜晚 在敲那些字符 printf("Hello World");

解说

    不妨说说 structc 的构成

 引进部分:   

    1. 内存池选用 jemalloc
    2. 复用 IO 选用 libuv
    3. 线程模型选用 pthtread  

补充部分 : 在 winds 争取实现 linux 一样的内容
       1. errno, strerror 机制
       2. socket 机制
       3. select / epoll 机制
       4. time 机制
       5. atom 机制
       ... ... 

核心部分

    1. mq.h     队列      - https://github.com/wangzhione/structc/blob/master/structc/struct/mq.h
    2. dict.h   字典      - https://github.com/wangzhione/structc/blob/master/structc/struct/dict.h
    3. tstr.h   字符串     - https://github.com/wangzhione/structc/blob/master/structc/struct/tstr.h
    4. list.h   单链表     - https://github.com/wangzhione/structc/blob/master/structc/struct/list.h
    5. rtree.h  红黑树     - https://github.com/wangzhione/structc/blob/master/structc/struct/rtree.h 
    6. array.h  动态数组    - https://github.com/wangzhione/structc/blob/master/structc/struct/array.h

... ... 也许可以说, 数据结构 当前 仍是软件设计的源头吧. 

本文虽然作为 structc 拉粉的软文. 但是感觉其中有些数据结构的设计思路很值得借鉴. 
例如 mq.h 中队列 empty or full 思路
//
// pop empty  <=> tail == -1 ( head == 0 )
// push full  <=> head == tail + 1
//
struct mq {
    int head;           // 头结点
    int tail;           // 尾结点
    int size;           // 队列大小
    void ** queue;      // 队列实体

    atom_t lock;        // 队列原子锁
    volatile bool fee;  // true表示销毁状态
};
dict.h 中关于素数表的引入
//
// primes - 质数表
//
const unsigned primes[][2] = {
    { (1<<6)-1  ,         53 },
    { (1<<7)-1  ,         97 },
    { (1<<8)-1  ,        193 },
    { (1<<9)-1  ,        389 },
    { (1<<10)-1 ,        769 },
    { (1<<11)-1 ,       1543 },
    { (1<<12)-1 ,       3079 },
    { (1<<13)-1 ,       6151 },
    { (1<<14)-1 ,      12289 },
    { (1<<15)-1 ,      24593 },
    { (1<<16)-1 ,      49157 },
    { (1<<17)-1 ,      98317 },
    { (1<<18)-1 ,     196613 },
    { (1<<19)-1 ,     393241 },
    { (1<<20)-1 ,     786433 },
    { (1<<21)-1 ,    1572869 },
    { (1<<22)-1 ,    31
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c语言实验报告(四) 从键盘输入.. 下一篇STM32F103C8T6、STM32F103ZET6工..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目