社区
工具平台和程序库
帖子详情
c语言中如何实现几个函数的并发执行,小弟很急呀
killer0428
2003-09-19 09:21:19
我再做一个有关C语言的编程,其中需要用到几个计时器,他和主程序之间的关系是并发执行,我不知道是用什么方法实现,但听说用中断或是信号量能实现。
我不知道该怎么做,请C语言的高手给我点指导,谢谢!
我的邮箱是killer0428@sina.com
...全文
631
12
打赏
收藏
c语言中如何实现几个函数的并发执行,小弟很急呀
我再做一个有关C语言的编程,其中需要用到几个计时器,他和主程序之间的关系是并发执行,我不知道是用什么方法实现,但听说用中断或是信号量能实现。 我不知道该怎么做,请C语言的高手给我点指导,谢谢! 我的邮箱是killer0428@sina.com
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
killer0428
2003-10-08
打赏
举报
回复
多谢各位给我的建议,顺便问一下,有谁用过opnet
mtpmtp
2003-10-07
打赏
举报
回复
"当执行倒计时器函数的时候"
不知道你的主程序是不是可以定时执行“计时器”函数,如果可以,你可以自己写定时器的创建,终止,及定时器结点的管理函数。最简单的实现原理:
各定时器结点的数据结构中至少包括:该定时器结点的标识号(ID),该定时器结点的长度(或可以称为计数器Counter),该定时器结点超时后要处理的函数信息(如:相关函数的指针)。
建议你用链表管理这些定时器结点,创建一个定时器,就把该结点放到忙链中,终止或定时器超时,就将该结点再放回到空闲链中。
主函数每次定时对忙链表中的定时器结点处理,将其Counter--(这是比较简单的一种处理方式),当Counter变为零,说明定时器超时,你可以用该结点保存的相关信息执行你需要的操作,然后将该结点从忙链取出,加到空闲链中。
yjf7888
2003-09-24
打赏
举报
回复
void *thre_route(int *piDelay)最后少了一句return NULL;
yjf7888
2003-09-24
打赏
举报
回复
简要提一下(使用unix下posix线程):
int g_iTimer = 0;//计数器
void *thre_route(int *piDelay);
int main()
{
thread_t thre_id;
int iDelayTime;
iDelayTime = 3;
pthread_create(&thre_id, thre_route, &iDelayTime);//启动线程
...
//以下代码可以检查g_iTimer的值
}
void *thre_route(int *piDelay)
{
int idelay = *piDelay;
while(1)
{
//用sleep或select实现指定时长的睡眠后把g_iTimer加一, 如
sleep(idelay);//用select代替sleep可以实现更精确的计时。
g_iTimer++;
}
}
手边没有资料,代码里函数和类型都是凭印象写的,可能有误。除了用线程,也可以用信号SIG_ALRM(大概是这样写的),多计时器需要自己写计时器链表。注意我说的是信号,不是信号量。
在windows环境下就简单多了,需要时再说。
同楼上,也可以用轮询的办法,精度可能低一些。
wkoji
2003-09-23
打赏
举报
回复
tc好象不支持多线程的
wengzhong
2003-09-23
打赏
举报
回复
不应该说C不支持线程
是DOS下的编程不支持线程
和操作系统有关
不用多线程也行的,轮换执行,在一个循环里,轮流执行就可以了.
不过计算时间不够精确,依赖住程序的运行速度.
也可以在主程序里每隔几个语句就加一个记时器.
for(;;)
{
time();
main();
}
killer0428
2003-09-23
打赏
举报
回复
当然,不用线程,只要能实现就行了。
killer0428
2003-09-23
打赏
举报
回复
具体功能是这样的:主程序在执行,当执行倒计时器函数的时候,计时器开始计时,每隔几秒钟将一个全局变量加一(注意:有几个计时器在执行)。当主程序执行到某个地方时,他要看现在的计时器记到几了,再执行下一步的程序。所以计时器函数和主程序之间的关系是并发执行,计时器就相当于在后台执行。所以我想到了用线程实现,但C里面不支持线程,不知道怎么实现。
yjf7888
2003-09-22
打赏
举报
回复
建议把帖子转到linux/unix版去,还有把你希望实现的具体功能说清楚.
killer0428
2003-09-22
打赏
举报
回复
yjf7888():
你能举出一个用信号量实现并发的例子吗?
希望你能给出一些源代码让我看看,谢谢!
yjf7888
2003-09-19
打赏
举报
回复
多线程+信号(UNIX)或
多线程+消息(win32)或者直接用系统提供的Timer
bluewinwind
2003-09-19
打赏
举报
回复
高手请把这个问题的答案也发给我吧,谢了
jackc524@hotmail.com
C语言
知识点总结
宏相关的技巧 宏定义
中
使用do{}while(0)的好处 http://blog.csdn.net/liliangbao/article/details/4163440 #define MACRO_NAME(para) do{macro content}while(0) 的格式,总结了以下
几个
原因: 1,空的宏定义避免warning:
c语言
开发 练手项目,
C语言
练手项目--C 语言编写聊天室
C 语言编写聊天室一、需求二、知识点1、TCP/IP协议(1)C/S模型(2)常规步骤(3)阻塞与非阻塞 socket(4)epoll2、文件操作3、数据库三、
实现
1、思路2、代码(1)utility.h(2)server.c(3)client.c3、运行结果参考一、需求基于TCP编写,一个聊天室C/S。基本要求支持多个用户接入,
实现
聊天室的基本功能使用epoll机制
实现
并发
、增加效率使用fork...
【多线程】学习记录七种主线程等待子线程结束之后在
执行
的方法
最近遇到一个问题需要主线程等待所有的子线程结束,才能开始
执行
,统计所有的子线程
执行
结果,返回,网上翻阅各种资料,最后记录一下,找到七种方案 第一种:while循环 对于“等待所有的子线程结束”的问题,最开始想到的是使用while循环进行轮询: //开始计时 String start = getTheTimeInMilliseconds(); System.out.println("start = " + start); Thread t = n
阿里面试:Redis 为啥那么快?怎么
实现
的100W
并发
?说出了6大架构,面试官跪地
阿里面试:Redis 为啥那么快?怎么
实现
的100W
并发
?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
淘宝,微软,IBM等公司笔试,面试题目
①淘宝笔试题目 题目大意如下:请使用
C语言
完成strnicmp的编码
实现
,要求不能调用任何其他
函数
。strcicmp完成两个ascii字符串的比较,忽略大小写(两个英文字母比时,认为大小写无差别),最多比较n个字符(当两个字符串长度超过n时,就认为它们的长度都等于n),返回0表示第一个字符串大于第二个字符串,返回等于0表示两个字符串相等。
函数
声明如下:int strnicmp(char
工具平台和程序库
24,855
社区成员
27,329
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章