两个线程按特定时间顺序交替执行

1、用到setitimer()函数,设定定时器

2、boost库用于创建两个线程

3、signal()用于将定时信号与响应函数绑定

源码如下:

#include<iostream>
#include<csignal>
#include<sys/time.h>
#include<boost/thread/thread.hpp>
using namespace std;

bool en_transmit=false,en_receive=false;

void transmit(void){
		cout<<"Transmit called..."<<endl;
		while(en_transmit){cout<<"";}
		cout<<"Finished Send..."<<endl<<endl;
		return;
}

void receive(void){
		cout<<"Receive called..."<<endl;
		while(en_receive){cout<<"";}
		cout<<"Finished Recv..."<<endl<<endl;
		return;
}

bool period=false;
void sigroutine(int signo){
		pthread_t send,recv;
		cout<<signo<<endl;
		boost::thread_group threads;
		switch(signo){
				case SIGALRM:
						en_receive=false;
						en_transmit=true;
						threads.create_thread(&transmit);
						break;
				case SIGVTALRM:
						en_transmit=false;
						en_receive=true;
						threads.create_thread(&receive);
						break;
		}
		return;
}

int main(){
		struct time{
				int sec;
				int usec;
		};

		struct time period;
		period.sec=5;
		period.usec=0;
		struct itimerval value,ovalue,value2;

		signal(SIGALRM,sigroutine);
		signal(SIGVTALRM,sigroutine);

		value.it_value.tv_sec=1;
		value.it_value.tv_usec=0;
		value.it_interval.tv_sec=period.sec;
		value.it_interval.tv_usec=period.usec;
		setitimer(ITIMER_REAL,&value,&ovalue);

		value2.it_value.tv_sec=2;
		value2.it_value.tv_usec=0;
		value2.it_interval.tv_sec=period.sec;
		value2.it_interval.tv_usec=period.usec;
		setitimer(ITIMER_VIRTUAL,&value2,&ovalue);

		while(1){
				pause();
		}

		return 0;
}

编译:g++ thread.cpp -o thread -lboost_thread

运行效果如下:

时间: 2024-08-28 14:59:27

两个线程按特定时间顺序交替执行的相关文章

线程的交替执行和顺序执行都不算并发吧?

问题描述 线程的交替执行和顺序执行都不算并发吧? 看到百度上说多线程是CPU交替执行的,那么并发不是同步执行的么?并发多线程交替执行有什么用? 解决方案 并发和并行(concurrent 和 parallel)不是一回事,你说的交替执行,这个在宏观上也是并发,但是不是并行.同时执行才是并行 解决方案二: 并发是指程序共享时间段,如果只有一个cpu,那么就是交替执行,如果是多核cpu,多线程有可能被分配到不同的cpu上同时执行. 解决方案三: 线程顺序执行(phtread)

请问使用两个线程分别输出100以内的奇数和偶数,并按从小到大的顺序输出如何操作?

问题描述 ]public synchronized void run(){oushu();qishu();}public void oushu(){ //偶数for (int i = 0; i < 101; i++) {if(i%2==0){System.out.println(Thread.currentThread().getName()+i);}}}public void qishu(){ //奇数for (int i = 0; i < 101; i++) {if(i%2!=0){引用

wordpress实现评论翻页、评论按时间顺序方法

因为本博客的留言板用的是文章模版,那么留言自然也就是评论系统了,今天偶然发现评论这块特难看还不是按时间顺序走的,那么简单的倒腾了下,现在拿出来给大家分享下!是网上不少办法的集合体!具体效果如下图: 一.让评论按时间顺序排列,最新评论在最前面 1.在后台-设置-讨论里 按下图设置: 2.到程序的/wp-includes/下找到comment-template.php文件做以下修改 用ctrl+F查找  代码如下 复制代码 ORDER BY comment_date_gmt 将其改为  代码如下 复

深入分析父子线程、进程终止顺序不同产生的结果_C 语言

Linux下编程,线程.进程退出顺序问题纷纷扰扰,如果父进程/线程先于子进程/线程终止,系统会做什么处理呢?反之,如果子进程/线程先于父进程/线程终止,系统又会做什么处理呢?下面是我个人平时在笔记上做的一些象征性的总结,如果有疑问之处,大可提出,我一直认为怀疑是人类进步的根本所在.一.线程Linux线程创建函数为pthread_create(),默认规则是谁创建子线程,谁就要负责子线程的资源回收,当父线程退出后,子线程也随着退出.所以,一般情况下,父线程退出时都要确保子线程已经退出,所以会使用p

我的代码是怎么进入死循环的,为什么有两个线程运行一会就唤不醒了

问题描述 classResource{privateStringname;privateintcount=1;privatebooleanflag=false;publicsynchronizedvoidset(Stringname){while(flag){notify();try{wait();}catch(InterruptedExceptione){}System.out.println(Thread.currentThread().getName()+"....循环唤醒..."

Excel怎么使用text函数计算两个日期相差的时间?

  Excel怎么使用text函数计算两个日期相差的时间?          1.先新建一个空白表格,重命名"计算两个日期的时间长"; 2.打开表格输入相应的类别标题,如"姓名.出差时间.返回时间.出差时长"; 3.在"姓名.出差时间.返回时间"类别里填入相应的内容; 4.在"D3"单元格输入公式"=TEXT(C3-B3,"[h]:mm:ss")",就会显示相差的时间了; 5.选中&qu

文件系统-两个线程分别写不同文件,文件却写串了!

问题描述 两个线程分别写不同文件,文件却写串了! Linux: C语言进程: 同一个进程中,A线程写a文件,B线程写b文件,但最后a文件里除A的内容外还被插入了部分B的内容,而b文件从没有出现过错误: 我检查了文件描述符的操作,都是局部的,应该不会串用,请高手们看看,有没有遇到过类似的问题,帮帮忙! 解决方案 需要把代码贴出来在才好分析问题. 解决方案二: 是不是线程的内容错乱了

数据存储-sql server在同一表中筛选出两次刷卡记录时间大于等于40分钟的员工数据

问题描述 sql server在同一表中筛选出两次刷卡记录时间大于等于40分钟的员工数据 刷卡进出数据存储在同一表中,姓名有重复的,一个人可能刷了2次,要求选出在时间段2014-12-28 11:00:00到2014-12-28 13:00:00内两次刷卡记录时间间隔大于等于40分钟的员工 logtime (时间 )logcard (卡号 )logid () logname(姓名) logbm (部门) 解决方案 ```select * from 同一表 a where logtime betw

两个线程打印到100,帮我看下为啥会打印到101

问题描述 两个线程打印到100,帮我看下为啥会打印到101 #include #include #include int N = 100;int n = 0;pthread_mutex_t mutex; void *func1(){ while (n < N+1) { pthread_mutex_lock(&mutex); printf (""%d 1n"" n); n++; pthread_mutex_unlock(&mutex); } if