日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > WebRTC學(xué)習(xí)之八:函數(shù)的異步執(zhí)行

WebRTC學(xué)習(xí)之八:函數(shù)的異步執(zhí)行

來源:程序員人生   發(fā)布時(shí)間:2017-02-21 08:30:08 閱讀次數(shù):4792次

WebRTC在asyncinvoker.h和asyncivoker.cpp中實(shí)現(xiàn)了函數(shù)的異步履行。asyncinvoker.h的注釋中給出了1個(gè)小例子,本文的學(xué)習(xí)就是從這個(gè)例子開始的。但是這個(gè)例子和單元測(cè)試代碼都只演示了如何讓1個(gè)函數(shù)在子線程中履行,以下所示。

myclass.h

#include "webrtc/base/asyncinvoker.h"
#include <iostream>
#include <memory>

class MyClass 
{

public:
	MyClass();
	void OneTask(rtc::Thread *thread, int x);

	void AnotherAsyncTask(int x);
	
private:
	std::unique_ptr<rtc::AsyncInvoker> invoker;
};
myclass.cpp
#include "myclass.h"
MyClass::MyClass()
{
	invoker.reset(new rtc::AsyncInvoker());
	std::cout << "Main Thread ID:" << rtc::Thread::Current()->GetId() << std::endl;
}

void MyClass::OneTask(rtc::Thread *thread, int x)
{
	invoker->AsyncInvoke<void>(RTC_FROM_HERE, thread, rtc::Bind(&MyClass::AnotherAsyncTask, (MyClass*)this, x));
}
void MyClass::AnotherAsyncTask(int x)
{
	std::cout << "Worker Thread ID:" << rtc::Thread::Current()->GetId() << std::endl;
	std::cout << "Input Value Is:" << x << std::endl;
}
main.cpp

#include "myclass.h"
int main()
{
	std::unique_ptr<rtc::Thread> myThread = rtc::Thread::Create();
	myThread->Start();
	MyClass *myClass = new MyClass;
	myClass->OneTask(myThread.get(), 10);

	Sleep(10000);

    return 0;
}

打印結(jié)果

從上圖輸出的線程ID可以看出,函數(shù)AnotherAsyncTask是在子線程中履行的。

但是如何在子線程中調(diào)用1個(gè)函數(shù),并讓該函數(shù)中主線程中履行呢,可以將上述代碼稍作更改,以下所示。

myclass.h

#include "webrtc/base/asyncinvoker.h"
#include <iostream>
#include <memory>

class MyClass 
{

public:
	MyClass();
	void OneTask(rtc::Thread *thread, int x);

	void AnotherAsyncTask(int x);
	
	void myFunction(int x);
	
private:
	std::unique_ptr<rtc::AsyncInvoker> invoker;
	rtc::Thread *mainThread;
};
myclass.cpp

#include "myclass.h"
MyClass::MyClass()
{
	invoker.reset(new rtc::AsyncInvoker());
	std::cout << "Main Thread ID:" << rtc::Thread::Current()->GetId() << std::endl;
	mainThread = rtc::Thread::Current();
}

void MyClass::OneTask(rtc::Thread *thread, int x)
{
	invoker->AsyncInvoke<void>(RTC_FROM_HERE, thread, rtc::Bind(&MyClass::AnotherAsyncTask, (MyClass*)this, x));
}
void MyClass::AnotherAsyncTask(int x)
{
	std::cout << "Worker Thread ID:" << rtc::Thread::Current()->GetId() << std::endl;
	std::cout << "Input Value Is:" << x << std::endl;

	invoker->AsyncInvoke<void>(RTC_FROM_HERE, mainThread, rtc::Bind(&MyClass::myFunction, (MyClass*)this, x));
}

void MyClass::myFunction(int x)
{
	std::cout << "myFunction Thread ID:" << rtc::Thread::Current()->GetId() << std::endl;
	std::cout << "myFunction Value Is:" << x << std::endl;
}
main.cpp

#include "myclass.h"
int main()
{
	std::unique_ptr<rtc::Thread> myThread = rtc::Thread::Create();
	myThread->Start();
	MyClass *myClass = new MyClass;
	myClass->OneTask(myThread.get(), 10);
	
	Sleep(10000);

    return 0;
}
函數(shù)AnotherAsyncTask中的invoker->AsyncInvoke<void>(RTC_FROM_HERE, mainThread, rtc::Bind(&MyClass::myFunction, (MyClass*)this, x));是想在mainThread中履行myFunction,但是myFunction并未履行,打印結(jié)果仍然和上圖相同。

這里需要將main.cpp稍作修改,添加代碼實(shí)現(xiàn)線程的消息循環(huán),新的main.cpp以下所示。

#include "myclass.h"
int main()
{
	std::unique_ptr<rtc::Thread> myThread = rtc::Thread::Create();
	myThread->Start();
	MyClass *myClass = new MyClass;
	myClass->OneTask(myThread.get(), 10);
	
	while (true)
	{
		rtc::Thread::Current()->ProcessMessages(0);
		rtc::Thread::Current()->SleepMs(1);
	}

    return 0;
}
打印結(jié)果以下圖所示。

從上圖輸出的線程ID可以看出,函數(shù)myFunction是在主線程中履行的。



生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲国产成人精品女人久 | 亚洲视频免费观看 | 国产精品五区 | 黄视频在线观看网站 | 国产在线精品二区 | 亚洲电影免费 | 欧美无乱码久久久免费午夜一区 | 精品一区久久久 | 久久久久久久国产 | 精品美女久久 | 欧美综合在线视频 | 一区二区三区成人 | 日本福利在线观看 | 日韩一级大片 | 欧洲成人精品 | 国产精品久久久久9999 | 日韩天堂网 | 九九热在线视频 | 久久一区国产 | 国产福利一区在线观看 | 国产不卡视频 | 国产精品久久久久久久久久久久久 | 国产精品天堂 | 91亚洲精选| 国产老女人精品毛片久久 | 久久精品在线视频 | 国产精品国产三级国产aⅴ中文 | av网站在线免费观看 | 亚洲精品久久久久中文字幕二区 | 国产精品久久毛片 | 亚洲黄色在线观看 | 精品久久久久久久人人人人传媒 | 欧美日视频 | 秋霞毛片| 国产色女 | 欧美精品www | 视频在线一区二区三区 | 精品美女久久久 | 日韩顶级毛片 | 成人性生交大片免费看中文网站 | 在线免费观看视频一区二区三区 |