c语言先进先出数组,定义一个数组,先进先出。怎样做效率高1点(4)

当前位置:我的异常网» C语言 » 定义一个数组,先进先出。怎样做效率高1点

定义一个数组,先进先出。怎样做效率高1点(4)

www.myexceptions.net  网友分享于:2014-07-11  浏览:1次

fbuf->tail=len2;

} else {

memcpy(fbuf->data+fbuf->tail,buf     ,lent);

fbuf->tail+=lent;

}

fbuf->size+=lent;

Unlock(cs);

return lent;

}

MYVOID thdA(void *pcn) {

char        *send_buf;

int          send_nbytes;

int          cn;

int          wc;

int           a;

int          pa;

cn=(int)pcn;

Log("%03d thdA              thread begin...\n",cn);

a=0;

while (1) {

sleep_ms(100);

memset(Abuf,a,ASIZE);

a=(a+1)%256;

if (16==a) {No_Loop=1;break;}//去掉这句可以让程序一直循环直到按Ctrl+C或Ctrl+Break或当前目录下存在文件No_Loop

send_buf=(char *)Abuf;

send_nbytes=ASIZE;

Log("%03d sending %d bytes\n",cn,send_nbytes);

HexDump(cn,send_buf,send_nbytes);

wc=0;

while (1) {

pa=PutToRBuf(cn,&cs_BBB,&BBB,send_buf,send_nbytes);

Log("%03d sent %d bytes\n",cn,pa);

HexDump(cn,send_buf,pa);

send_buf+=pa;

send_nbytes-=pa;

if (send_nbytes<=0) break;//

sleep_ms(1000);

if (No_Loop) break;//

wc++;

if (wc>3600) Log("%03d %d==wc>3600!\n",cn,wc);

}

if (No_Loop) break;//

}

#ifndef WIN32

pthread_exit(NULL);

#endif

}

int main() {

#ifdef WIN32

InitializeCriticalSection(&cs_log);

InitializeCriticalSection(&cs_HEX );

InitializeCriticalSection(&cs_BBB );

#else

pthread_t threads[2];

int threadsN;

int rc;

pthread_mutex_init(&cs_log,NULL);

pthread_mutex_init(&cs_HEX,NULL);

pthread_mutex_init(&cs_BBB,NULL);

#endif

Log("Start===========================================================\n");

BBB.head=0;

BBB.tail=0;

BBB.size=0;

#ifdef WIN32

_beginthread((void(__cdecl *)(void *))thdA,0,(void *)1);

_beginthread((void(__cdecl *)(void *))thdB,0,(void *)2);

#else

threadsN=0;

rc=pthread_create(&(threads[threadsN++]),NULL,thdA,(void *)1);if (rc) Log("%d=pthread_create %d error!\n",rc,threadsN-1);

rc=pthread_create(&(threads[threadsN++]),NULL,thdB,(void *)2);if (rc) Log("%d=pthread_create %d error!\n",rc,threadsN-1);

#endif

if (!access("No_Loop",0)) {

remove("No_Loop");

if (!access("No_Loop",0)) {

No_Loop=1;

}

}

while (1) {

sleep_ms(1000);

if (No_Loop) break;//

if (!access("No_Loop",0)) {

No_Loop=1;

}

}

sleep_ms(3000);

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bit-packing压缩是一种常用的数据压缩方式,它将多个数据压缩到一个整型变量中,从而节省空间。下面是一个示例代码: ```c #include <stdio.h> // 定义一个整型数组 int arr[] = { 12, 45, 78, 34, 56, 90, 23, 87, 65, 43 }; int main() { // 定义一个32位整型变量,用于存储压缩后的数据 unsigned int packed = 0; // 定义一个计数器,用于计算当前已经压缩了多少个数 int count = 0; // 遍历数组,将每个数压缩到整型变量中 for (int i = 0; i < 10; i++) { // 将当前数左移(32 - 5 * count)位,相当于给当前数腾出空间 // 然后将当前数按位或到整型变量中,完成压缩 packed |= arr[i] << (32 - 5 * count); // 计数器加1 count++; // 如果已经压缩了5个数,就将整型变量输出,并将计数器和压缩后的数据清零 if (count == 5) { printf("%u ", packed); packed = 0; count = 0; } } // 如果还有未压缩的数,就将它们压缩到整型变量中,并输出 if (count > 0) { printf("%u ", packed); } printf("\n"); return 0; } ``` 在上面的代码中,我们使用了一个32位的无符号整型变量,将每个数左移一定的位数,然后按位或到整型变量中,完成压缩。这里我们将每个数压缩到5位,这样每个整型变量就可以压缩5个数。如果数组中的元素个数不是5的倍数,最后还需要将剩余的数压缩到整型变量中,并输出。 需要注意的是,Bit-packing压缩的效率与压缩的位数有关。如果每个数压缩的位数太少,压缩后的结果会浪费空间;如果每个数压缩的位数太多,虽然压缩率高,但是解压时的效率会降低。因此在实际应用中,需要根据数据的特和压缩效果进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值