C++多选题求助?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++多选题求助?相关的知识,希望对你有一定的参考价值。
class YLEI
protected: int a;
public: YLEI(int a0=1):a(a0)
;
class FLEI: private YLEI
public: int b;
FLEI(int b0=2):b(b0) b=b+a;
;
class SLEI: public FLEI
public: SLEI() ;
int main()
SLEI dx;
cout<<dx.b;
return 0;
本文描述的异步多任务是通过同一进程内的调度器来调度该进程内多个异步任务,这些异步任务的真正执行是通过工作线程来完成。其模型为:各异步的任务发送请求后阻塞;当其请求的任务完成后,调度器唤醒该任务并执行相应的处理(也许会再次发送一个请求)。这时一个典型的生产者/消费者的问题:在调度器中,生产者是任务,而调度器是消费者。一旦任务的请求完成,调度器则执行该任务。
处理流程
由于scheduler是在一个进程中,因此需要先将scheduler安装到进程中,然后将各异步任务添加到scheduler,之后,各异步任务发送第一个请求等待完成。最后启动scheduler,处理各个已经完成请求。如下图所示:
任务
每个任务都应当继承自同一个基类以使得调度器可以以相同的方式处理他们。每个派生的任务都应当包含(至少)一个异步操作(或所属对象),该操作可以执行1~n次。每次异步操作完成之后,其Run()函数将被调用以进行后续处理。因此,任务至少应当具有一个状态成员用于指示该任务所处的状态。当任务处理完毕之后,任务可以把自己从调度队列中移出。由于添加任务到调度队列的操作应当由调度器而不是任务本身来做,因此,不需要Add()操作。因此,任务类应当象这样:
其中:
StartWorker()、Dequeue()都是由TaskBase来实现的:
int TaskBase::Dequeue()
Scheduler* sched = SchedulerInstance::GetInstance();
int ret = ErrNone;
m_Mutex->Lock();
if (sched && m_Status != TaskPending)
sched->Remove(this);
else
ret = ErrTaskBusy;
m_Mutex->Unlock();
return ret;
int TaskBase::StartWorker()
Scheduler* sched = SchedulerInstance::GetInstance();
int ret = ErrNone;
m_Mutex->Lock();
if (sched && (m_Status != TaskPending || m_Status != NotAvailable))
m_Worker->RunThread(this);
else
ret = ErrTaskBusy;
m_Mutex->Unlock();
return ret;
void TaskBase::CancelWorker()
Scheduler* sched = SchedulerInstance::GetInstance();
m_Mutex->Lock();
if (sched && m_Status == TaskPending)
m_Worker->Cancel();
m_Status = TaskCancelled;
m_Mutex->Unlock();
由于使用了工作线程来进行真正的异步操作,因此,应当有一个静态函数来作为线程的入口函数。
其实现为:
void WorkerThread::ThreadFunction(void* aData)
TaskBase* task = static_cast<TaskBase*>(aData);
if (task)
task->IssueRequest();
// Notify the Scheduler
Scheduler* sched = SchedulerInstance::GetInstance();
if (sched)
sched->Notify();
由于工作线程的实现与平台相关,因此此处列出Linux平台的典型实现:
void LinuxThread::RunThread(void* aData)
pthread_create(&m_TID, NULL, WorkerThread::ThreadFunction, aData);
Scheduler* sched = SchedulerInstance::GetInstance();
if (sched)
sched->Notify();
void LinuxThread::Cancel()
pthread_cancel(m_TID);
Scheduler* sched = SchedulerInstance::GetInstance();
if (sched)
sched->Notify();
参考技术A 选BCD。
A错是因为b在SLEI中是公有(通过公有继承父类的公有成员b)的,可以在main中访问。本回答被提问者采纳
腾讯测试工程师笔试体会
时间:2016年9月10日
笔试题目:25道多选题(限时60分钟)+25道填空题(限时60分钟)
1.多选题涉及数据结构、操作系统、计算机网络、C语言、软件工程、安卓、C++相关类型的题目
2.填空题及数据结构、操作系统、计算机网络、C语言、软件工程、安卓、C++相关类型
例如:1.android在内存使用上默认没有使用(),而使用low memory killer 可以让APP有足够的内存使用
2.读程序,写出输出
3.比较2段程序说出面向对象编程语言的一个基本特性
4.哈夫曼编码
5.对于32位操作系统,如果页面大小为4KB,则页面号占()位,页内偏移值占()位
6.在X86机器上,当前寄存器SP值为1020H,假设函数调用参数以压栈形式传道,现调用test函数,则C所在的栈地址
。。。。。。
以上是关于C++多选题求助?的主要内容,如果未能解决你的问题,请参考以下文章