摘要:wait是Object类的方法,sleep与yield都是Thread类的方法。wait调用的时候需要注意的是该方法是释放锁标志的,而sleep在调用的时候是紧紧抱着锁标志的,也就是等他完全执行完成了才可以让其他线程来访问的sleep 方法使当前运行中的线程睡眼一段时间,进入不可运行状态,这段时间的长短是由程序设定的,yield 方法使当前线程让出 CPU 占有权,但让出的时间是不可设定的。实际上...
阅读全文
随笔分类 - C/C++编程
摘要:多线程中,线程需要暂停的原因多种多样,基本分为两大类,1是等待数据,2是系统资源紧张,停止计算以把资源让给其他线程.一般初学者会使用的方法就是使用SuspendThread和ResumeThread这两个API或者他们的包装函数进行操作,许多教材上都是这么说的,但这么作会带来及其严重的问题。
阅读全文
摘要:(主要是摘译Programming with POSIX threads)如果想停止一个进程的主线程,而允许其他线程继续运行,必须使用pthread_exit(),而不是直接退出main()。从第三方的角度上看,一个线程通过返回正常退出或者通过pthread_exit()退出,与通过取消机制结束执行的唯一区别就是被取消的线程返回值总是PTHREAD_CANCELLED。一旦pthread_join...
阅读全文
摘要:本示例为 Client/Server 结构,通过代码演示 Client 如何建立连接,并向远程端发送数据;Server 端如何侦听系统连接请求,接收请求并建立连接,进而获取客户端发来的数据。代码虽短,却描述了整个通信过程
阅读全文
摘要:以前用 C++ 做过的 DRM 项目,现抽取出其中核心的代码, 演示一下如何借助 DRM 对流媒体文件进行保护。虽然微软的 DRM 技术被破解了, 但那是以用户通过认证并下载证书为前提的。由是观之, 运用 DRM 对流媒体文件施以保护仍有一定意义,这毕竟比什么都不做要强嘛!/* drm.h*/#ifndef __DRM_H__#define __DRM_H__#include <string...
阅读全文
摘要:// 头文件 Calc.h#ifndef __CALC_H__#define __CALC_H__ #include <stack>#define ascii_int(x) (x >= 0x30 && x <= 0x39) ? (x - 0x30) : (x)const int GREATER = 1;const int EQUAL = 0;const in...
阅读全文
摘要:过程如下所示:/* shrobj.c 文件 */const char *myfunc(){ return "Hello World";} /* hello.c 文件 */#include <stdio.h>extern const char *myfunc();main(){ printf("%s\n", myfunc()); return 0;}编译: gcc -fpic -c sh...
阅读全文
摘要:如何在C++中调用已经被编译好的C函数?下面的小例子展示了这个过程:1. 假设某C函数如下定义/* file foo.c*/#include <stdio.h>int add(int x, int y){ return x + y;}编译并生成DLL:gcc -fpic –c foo.cgcc –shared -o foo.dll foo.o2. 在C++中调用...
阅读全文
摘要:Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍。
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个 25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。传输距离在码元畸变小于 4% 的情况下,传输电缆长度应为 50 英尺
阅读全文
摘要:为了便于通过程序来获得和修改终端参数,Linux还提供了tcgetattr函数和tcsetattr函数。tcgetattr用于获取终端的相关参数,而tcsetattr函数用于设置终端参数。这两个函数的具体信息如表6.2所示。表6.2 tcgetattr函数和tcsetattr函数头文件<termios.h><unistd.h>函数形式int tcgetattr(int fd...
阅读全文
摘要:初始化SOCKET(客户端) 连接到host的port端口/////////////////////////////////////////////int InitSocket_Client(unsigned char *host,int port){ int sockfd;struct hostent *he;struct sockaddr_in srvaddr; int connectflag...
阅读全文
摘要:传值:#include <stdio.h>#include <pthread.h>void thread(int i){ int k; for (k=0;k<10;k++) { printf("this is %d pthread.\n",i); }}int main(){ pthread_t pthread_id; int i,ret; int m=2; ret=p...
阅读全文
摘要:struct S1 { char c; int i; }; 问sizeof(s1)等于多少? 聪明的你开始思考了,char占1个字节,int占4个字节,那么 加起来就应该是5。是这样吗你在你机器上试过了吗也许你是对的,但很可能你是错 的!VC6中按默认设置得到的结果为8。 Why为什么受伤的总是我 请不要沮丧,我们来好好琢磨一下sizeof的定义——sizeof的结果等于对...
阅读全文
摘要:int SelectRecv(int sockdf, unsigned char *data, int len,int mark){ int retval; int flag=-1; fd_set rfds; struct timeval timeout; timeout.tv_sec=0; timeout.tv_usec=2; FD_ZERO(&rfds); FD_SET(sockdf...
阅读全文
摘要: 代码实例中的服务器通过socket连接向客户端发送字符串"Hello, you are connected!"。只要在服务器上运行该服务器软件,在客户端运行客户软件,客户端就会收到该字符串。
无连接的客户/服务器程序的在原理上和连接的客户/服务器是一样的,两者的区别在于无连接的客户/服务器中的客户一般不需要建立连接,而且在发送接收数据时,需要指定远端机的地址。
阅读全文
摘要: 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
阅读全文
摘要:
阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。例如,程序执行一个读数据的函数调用时,在此函数完成读操作以前将不会执行下一程序语句。当服务器运行到accept语句时,而没有客户连接服务请求到来,服务器就会停止在accept语句上等待连接服务请求的到来。这种情况称为阻塞(blocking)。而非阻塞操作则可以立即完成。比如,如果你希望服务器仅仅注意检查是否有客户在等待连接,有就接受连接,否则就继续做其他事情,则可以通过将Socket设置为非阻塞方式来实现。非阻塞socket在没有客户在等待时就使accept调用立即返回。
阅读全文
摘要:int recvsocket=InitSocket_Server(RECVPORT);//初始化接受端口ret=pthread_create(&pthread_id,NULL,(void *)pthread_1,(void*)&recvsocket);其中pthread_1的定义如下: void pthread_1(int *socket) { SelectRecv(socket,...
阅读全文
摘要:应用层: #include <unistd.h>1、unsigned int sleep(unsigned int seconds); 秒级2、int usleep(useconds_t usec); 微秒级:1/10^-6 #define _POSIX_C_SOURCE 199309 #include <time.h> 3、int nanosleep(const st...
阅读全文
摘要:void Openint(void) //打开中断{ EA=1;//开中断 IT0=1; //外部中断0下降沿触发 IT1=1; //外部中断1下降沿触发 EX0=1;//外部中断0 EX1=1;//外部中断1 ET0=1;//开timer0中断 ES=0;//开串口中断}void IntGradeSet(void) //设置优先级{ PS=0; //串口优先级 PT0=0; //timer0中...
阅读全文


浙公网安备 33010602011771号