UC故事 2011/12/08 总结与计划(续4)

uniapp+萤石视频监控实战:解决ezuikit.js真机调试不显示的5个关键步骤 本文针对Uniapp集成萤石视频监控时ezuikit.js在真机调试中黑屏不显示的问题,提供了5个关键解决步骤。核心方案是采用Webview加载独立H5播放页,以规避跨平台环境差异,并详细阐述了资源放置、多端适配、通信处理及系统化排查方法,确保视频流稳定播放。 阅读详情

1. 近日要点

* 关于Thread与EventQueue(实际为Reactor)的使用总结

                                  主(平台)线程类              网络线程类                           主线程事件队列类                                 网络线程事件队列类

操作系统             

Win32                      CRtThreadReactor            CRtThreadReactor  ?         CRtReactorWin32Message              CRtReactorWin32AsyncSelect        

Linux                         CRtThreadTask                  CRThreadReactor              EventQueue                                         CRtReactorEpoll


Q1:CRtReactorWin32Asyncselect同时处理EventQueue与Socket的Event,这个定位从design上说是否合理?

Q2:CRtReactorBase::ProcessHandleEvent因前述原因,需要同时处理EventQueue的event以及socket的event,似乎污染了这一个接口的本义?

 

2. 问题汇总

 

Q: CRtThreadManager::JoinAllThreads()什么意思?

Q:EventQueue与TimerQueue

前者用于不同线程之间传递信息,后者完成定时器功能,如何理解定时器功能?

 

Q:理解cmd_main例子的几个问题

      Q:init main thred的时候,主线程的run event loop未运行?

      Q:几块东东如何关联的?

      Q:运行主线程的时候,没有reactor也没有问题?

 

Q:Conference Client主界面看见后,会有一个短暂的停顿,并出现白屏,背后在做什么东东?

 

3. 杂记

* std::auto_ptr用法:

http://wenku.baidu.com/view/42ad53fec8d376eeaeaa319e.html

 

4. 跟踪CConfPing.StartPing()

 

* main thread

STACK TRACE:

ReactorBase::PostEvent(IRtEvent * 0x01efd440, IRtEventQueue::EPriority EPRIORITY_NORMAL) line 517
CRtConnectorThreadProxy::AsycConnect(IRtAcceptorConnectorSink * 0x01efd138, const CRtInetAddr & {...}, CRtTimeValue * 0x01efd010, CRtInetAddr * 0x00000000) line 105 + 59 bytes
CRtDetectionConnector::CConnectorItem::AsycConnect(CRtTimeValue * 0x01efd010, CRtInetAddr * 0x00000000) line 214 + 46 bytes
CRtDetectionConnector::StartDetectionConnect(IRtAcceptorConnectorSink * 0x01efd370, CRtTimeValue * 0x0011c304, IRtDetectionConnector::DetectMode DETECT_INTERVAL_1S, CRtInetAddr * 0x00000000) line 78
CRtIMConnProvider::Connect_i(IConnProviderSink * 0x01efcbc8, unsigned long 1, const TransportAddress * 0x01efcd60, Event_Type EVENT_TYPE_CONFERENCE_PING, CRtTimeValue * 0x0011c304, int 0, int 1) line 454 + 39 bytes
CRtIMConnProvider::Connect(IConnProviderSink * 0x01efcbc8, unsigned long 1, const TransportAddress * 0x01efcd60, Event_Type EVENT_TYPE_CONFERENCE_PING, CRtTimeValue * 0x0011c304, int 0) line 356
CPingBase::Ping() line 116 + 51 bytes
CPingBase::StartPing() line 93
CConference::JoinConference(const CConfDetailInfo & {...}, const CInfoRosterInfo & {...}, unsigned short 1, const CRtString * 0x01efa27c {0x01efa2d1 "tcp://172.16.1.12:443"}, int 1, unsigned long 2147483648) line 225 + 24 bytes
CConfManage::CreateConference() line 2617 + 103 bytes
CMainFrame::OnCreate(unsigned int 1, unsigned int 1, unsigned int 1, unsigned int 1) line 1879
CMainFrame::ProcessWindowMessage(HWND__ * 0x00021040, unsigned int 1, unsigned int 0, long 1204320, long & -858993460, unsigned long 0) line 138 + 37 bytes
ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<114229248,262400> >::WindowProc(HWND__ * 0x01ef9250, unsigned int 1, unsigned int 0, long 1204320) line 2110 + 37 bytes
USER32! 77d18734()
USER32! 77d2bdf1()
USER32! 77d28ea0()
USER32! 77d2ce7c()
NTDLL! 7c92e473()
USER32! 77d2e442()
USER32! 77d2e4dc()
WTL::CFrameWindowImplBase<ATL::CWindow,ATL::CWinTraits<114229248,262400> >::Create(HWND__ * 0x00000000, ATL::_U_RECT {...}, const char * 0x001266e0, unsigned long 114229248, unsigned long 262400, ATL::_U_MENUorID {...}, unsigned short 50350, void * 0x00000000) line 456 + 91 bytes
WTL::CFrameWindowImpl<CMainFrame,ATL::CWindow,ATL::CWinTraits<114229248,262400> >::Create(HWND__ * 0x00000000, ATL::_U_RECT {...}, const char * 0x001266e0, unsigned long 114229248, unsigned long 262400, HMENU__ * 0x01d40e79, void * 0x00000000) line 1196
WTL::CFrameWindowImpl<CMainFrame,ATL::CWindow,ATL::CWinTraits<114229248,262400> >::CreateEx(HWND__ * 0x00000000, ATL::_U_RECT {...}, unsigned long 0, unsigned long 0, void * 0x00000000) line 1221 + 42 bytes
Run(char * 0x00141f37, int 1) line 195 + 35 bytes
LaunchConf(HINSTANCE__ * 0x00400000, char * 0x00141f37, int 1) line 318 + 13 bytes
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141f37, int 1) line 85 + 20 bytes
WinMainCRTStartup() line 330 + 54 bytes
KERNEL32! 7c817077()

CRtConnectorThreadProxy::AsycConnect {

 ......

 RtResult rv = RT_ERROR_OUT_OF_MEMORY;
 CEventAsycConnect *pEvent = new CEventAsycConnect(
  this, this, aAddrPeer, aTimeout, aAddrLocal);
 if (pEvent) {
  rv = m_pThreadNetwork->GetEventQueue()->PostEvent(pEvent);
 }

.......

}

 

* network thread

STACK TRACE:

CRtConnectorTcpT<CRtConnectorWrapper,CRtTransportTcp,CRtSocketStream>::Connect_i(CRtTransportTcp * 0x01efbdc0, const CRtInetAddr & {...}) line 202
CRtConnectorTcpT<CRtConnectorWrapper,CRtTransportTcp,CRtSocketStream>::Connect(const CRtInetAddr & {...}, CRtInetAddr * 0x00000000) line 82 + 22 bytes
CRtConnectorWrapper::AsycConnect(IRtAcceptorConnectorSink * 0x01efbc80, const CRtInetAddr & {...}, CRtTimeValue * 0x01efd46c, CRtInetAddr * 0x00000000) line 109 + 26 bytes
CConnConnectorT<CRtConnRlbTcpClient>::AsycConnect(IRtAcceptorConnectorSink * 0x01efd0c4, const CRtInetAddr & {...}, CRtTimeValue * 0x01efd46c, CRtInetAddr * 0x00000000) line 71 + 84 bytes
CEventAsycConnect::OnEventFire() line 187 + 74 bytes
CRtEventQueueBase::ProcessOneEvent(IRtEvent * 0x01efd440) line 229 + 12 bytes
CRtEventQueueBase::ProcessEvents(const std::list<IRtEvent *,std::allocator<IRtEvent *> > & {...}) line 217
CRtReactorBase::ProcessHandleEvent(void * 0xffffffff, long 256, int 0, int 1, int 0) line 324 + 18 bytes
CRtReactorWin32Message::Win32SocketWndProc(HWND__ * 0x000310c6, unsigned int 1058, unsigned int 4294967295, long 256) line 115
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d189cd()
USER32! 77d196c7()
CRtReactorWin32Message::RunEventLoop() line 262 + 15 bytes
CRtThreadReactor::OnThreadRun() line 67 + 19 bytes
CRtThread::ThreadProc(void * 0x01ef8788) line 151 + 13 bytes
_threadstartex(void * 0x01ef8838) line 227 + 13 bytes
KERNEL32! 7c80b729()

CODE:

CRtConnectorTcpT<CRtConnectorWrapper,CRtTransportTcp,CRtSocketStream>::Connect_i {

 ......

  /// we regiester CONNECT_MASK prior to connect() to avoid lossing OnConnect()
  RtResult rv = m_pReactor->RegisterHandler(this, IRtEventHandler::CONNECT_MASK);            // Q:why register handler ?
  if (RT_FAILED(rv))
   return -1;

  nRet = ::connect((RT_SOCKET)sockPeer.GetHandle(),              // 此处向远方发connect请求
        reinterpret_cast<const struct sockaddr *>(aAddr.GetPtr()),
        aAddr.GetSize());

 ......

}

 

注1:ping的操作通过network thread完成,UI thread通过向network thread发送事件(PostEvent(Async Connect Event))

注2:::connect()执行后,tcpview.exe里出现相关连接,wireshark出现sync/ack包

 

5. 跟踪ChatMainDlg::OnBtnSend():Chat窗口发送数据

* main thread

STACK TRACE:

CRtTransportThreadProxy::SendData(CRtMessageBlock & {...}, int 0, int 0, IRtTransport::DataPriority DP_MEDIUM, int 0) line 127
CRtTransportThreadProxy::SendData(CRtMessageBlock & {...}, RtRudpReliability RUDP_RELIABLE_ORDERED, int -1, int 0, int 0, IRtTransport::DataPriority DP_MEDIUM, unsigned char 0) line 141 + 31 bytes
CRtIMConnection::SendData(CRtMessageBlock & {...}, int 0, RtRudpReliability RUDP_RELIABLE_ORDERED, unsigned char 0, int -1) line 942 + 51 bytes
CConfConnection::SendBufData(CRtMessageBlock & {...}) line 249 + 39 bytes
CConfConnection::SendData_i() line 263 + 15 bytes
CConfConnection::SendData(CRtMessageBlock & {...}, DATA_Priority DATA_PRIORITY_HIGH, unsigned long 2) line 211
CConfPort::SendData(CRtMessageBlock & {...}, DATA_Priority DATA_PRIORITY_HIGH, unsigned long 2) line 80 + 33 bytes
CConfPort::SendData(CInfoSvrPduBase * 0x0013384c, DATA_Priority DATA_PRIORITY_HIGH, unsigned long 2) line 60 + 23 bytes
CConference::SendData(CInfoSvrPduBase * 0x0013384c, DATA_Priority DATA_PRIORITY_HIGH, unsigned long 2) line 1243 + 48 bytes
CConfSession::SessSenddData(const CInfoSID & {...}, DATA_Priority DATA_PRIORITY_HIGH, unsigned long 2, unsigned long 52, unsigned char * const 0x01ed2be8) line 116 + 23 bytes
CConfSession::SendData_i(const CInfoSID & {...}, DATA_Priority DATA_PRIORITY_HIGH, unsigned long 2, unsigned long 52, unsigned char * 0x01f3bec8) line 296 + 33 bytes
CConfSession::SendData(const CInfoSID & {...}, DATA_Priority DATA_PRIORITY_HIGH, unsigned long 2, unsigned long 52, unsigned char * const 0x01f3bec8) line 281
CChatSession::SendChatData(unsigned long 52, unsigned char * const 0x01f3bec8, CInfoSID * 0x00000000) line 504 + 62 bytes
CChatMainDlg::SendData(int 1, WTL::CString & {...}, WTL::CString & {...}) line 1114
CChatMainDlg::SendMessageW(WTL::CString & {...}) line 522
CChatMainDlg::PressSend(int 0) line 498
CChatMainDlg::OnSendMsg(unsigned int 2026, unsigned int 0, long 0, int & 1) line 1364
CChatMainDlg::ProcessWindowMessage(HWND__ * 0x000206d0, unsigned int 2026, unsigned int 0, long 0, long & -858993460, unsigned long 0) line 152 + 40 bytes
ATL::CDialogImplBaseT<ATL::CWindow>::DialogProc(HWND__ * 0x01ee4970, unsigned int 2026, unsigned int 0, long 0) line 2279 + 37 bytes
USER32! 77d18734()
USER32! 77d23ce4()
USER32! 77d23b30()
USER32! 77d23d5c()
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d189cd()
USER32! 77d196c7()
WTL::CMessageLoop::Run() line 468 + 15 bytes
Run(char * 0x00151f31, int 1) line 207 + 11 bytes
LaunchConf(HINSTANCE__ * 0x00400000, char * 0x00151f31, int 1) line 318 + 13 bytes
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00151f31, int 1) line 85 + 20 bytes
WinMainCRTStartup() line 330 + 54 bytes
KERNEL32! 7c817077()

CODE:

CRtTransportThreadProxy::SendData{

    ......

    CRtEventSendData* sendDataEvent =
        new CRtEventSendData(this, inDestroyData ? &inData : inData.DuplicateChained(), inSendImmediately, inPriority, inNeedAck);
    return m_networkThread->GetEventQueue()->PostEvent(sendDataEvent);

                               ^ 向网络线程PostEvent(CRtEventSendData)

    ......

}

注:仍然是通过向network thread投递event来完成数据的传输。


* network thread

STACK TRACE:

CRtConnRlbTcp::SendData(CRtMessageBlock & {...}, int 0, int 1, IRtTransport::DataPriority DP_MEDIUM, int 0) line 95
CRtEventSendData::OnEventFire() line 299 + 76 bytes
CRtEventQueueBase::ProcessOneEvent(IRtEvent * 0x01f36440) line 229 + 12 bytes
CRtEventQueueBase::ProcessEvents(const std::list<IRtEvent *,std::allocator<IRtEvent *> > & {...}) line 217
CRtReactorBase::ProcessHandleEvent(void * 0xffffffff, long 256, int 0, int 1, int 0) line 324 + 18 bytes
CRtReactorWin32Message::Win32SocketWndProc(HWND__ * 0x0004014e, unsigned int 1058, unsigned int 4294967295, long 256) line 115
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d189cd()
USER32! 77d196c7()
CRtReactorWin32Message::RunEventLoop() line 262 + 15 bytes
CRtThreadReactor::OnThreadRun() line 67 + 19 bytes
CRtThread::ThreadProc(void * 0x01ec8098) line 151 + 13 bytes
_threadstartex(void * 0x01ec8148) line 227 + 13 bytes
KERNEL32! 7c80b729()

SAP 物料的与压缩库存数据不一致 总结:发生这个问题的原因多数会发生在测试系统在拷贝正式系统的时候会发生这样的情况,系统在拷贝的时候,业务数据还在发生,就会导致数据拷贝的时候丢失数据。经过查询发现是由于物料分类账中的物料的库存数量和 ACDOCA_M_EXTRACT表中的数量对不上,导致系统抛出报错的信息。由于是测试系统,直接更改表的数据,把ACDOCA_M_EXTRACT表中的库存数据和金额与物料分类账中的数据保持一致。在测试系统中进行501和561增加库存的时候,系统提示物料的预压缩库存数据不一致的报错。 阅读详情

相关推荐

国产AI芯动力:复旦微FMQL100TAI900 FPGA原型验证板全解析

本文全面解析了复旦微FMQL100TAI900 FPGA原型验证板在国产AI硬件领域的创新突破。该板卡采用全栈国产化设计,具备出色的AI推理性能、视频处理能力和接口生态,特别适合工业质检、智能交通等场景。文章详细介绍了其芯片架构、存储子系统、接口扩展及电源设计,并分享了实战开发经验,为开发者提供了一套可靠的国产计算平台解决方案。

weixin_29250573的博客 456

深入理解JVM【内存结构-垃圾回收-类加载&字节码技术-内存模型】

文章目录一、什么是 JVM ?1、HotSpot介绍2、HosSpot中的概念2.1解释执行与 JIT2.2热点代码2.3热点探测3、JVM、JRE、JDK 的关系4、常见的 JVM5、JAVA运行时环境逻辑图6、JVM运行原理7、关于JVM的几个问题7.1几个数据结构的概念【1】堆【2】栈【3】栈帧7.2为什么HotSpot虚拟机要使用解释器与编译器并存的架构?7.3为何HotSpot虚拟机要实现两个不同的即时编译器?3)哪些程序代码会被编译为本地代码?如何编译为本地代码?7.4如何判断方法或一段代码或是

欢迎来到编程小栈 4567

32位MIPS流水线CPU设计

32位MIPS流水线CPU设计(vivado)

m0_51320209的博客 3199

UC故事 2011/12/05 总结与计划(续2)

1. 要点回顾  * SendData/ReceiveData的本质: SendData=Main thread向network thread发送(PostEvent)一个CRtEventSendData;在CRtEventSendData::OnEventFire中,network thread通过socket送出 ReceiveData=network thread从socket接收数据

printf1998的专栏 496

【数据清洗】数据清洗流程及经验

预处理阶段 预处理阶段主要做两件事情: 一是将数据导入处理工具。 二是看数据。包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。 第一步:缺失值清洗 四个步骤: 1、确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略。 2、去除不需要的...

JoJo93723的博客 6492

51雾化器实现

1. 雾化器简介 雾化器是将试液雾化的一种器械。雾化器是原子化系统的重要部件,其性能对测定的精密度和化学干扰等产生显著影响。因此要求雾化器喷雾稳定、雾滴细小、均匀和雾化效率高。雾化器的类型有超声雾化器,空气压缩式雾化器,网式雾化器。超声雾化器因其价格合适,适合家用,被广泛应用于加湿器,香薰机等各种小家电,也在医疗领域有很多的应用。家用雾化器的主要器件是一枚雾化片。 家用雾化器分为两种不同类别雾化片,实孔雾化片和微孔雾化片,这两种的喷雾方法和工作原理是有所不同的。不同的雾化片需要特定的频率才能工作。 实孔雾

qq_42415953的博客 2万+

UC故事 2012/05/20

1. source browing * startup 设置SIGINT/SIGPIPE信号处理 初始化main thread         选择reactor         生成main thread (configured with reactor)         init main thread         spawn network thread

printf1998的专栏 681

2023年全国城市房价分布网格数据

本文介绍了一份2023年全国主要城市房价分布的网格数据,数据以250米×250米的网格为单位,记录了住宅小区数量、均价、最高价和最低价等信息。数据采用GCJ-02坐标系,提供ShapeFile、GeoJSON和CSV三种格式

J_Giser的博客 375

UC故事2011/12/04 总结与规划 (续)

1. 要点总结 * 2011/11/22: Client核心类图及关于XXXSink的理解 * Chat窗口中的信息如何传递到服务器 UI线程:UI上的button消息响应函数 UI线程:得到网络线程的Reactor指针pReactor UI线程:pReactor->PostEvent(SendDataEvent),投递event,并呼叫NotifyHandler通知reactor处理e

printf1998的专栏 703

CentOS 7 Linux yum 安装 Docker,解决 Docker 镜像拉取失败问题

本文详细介绍了在 CentOS 7 系统上通过 yum 安装 Docker 的完整流程,包括卸载旧版本、配置阿里云国内镜像源、安装 Docker 及其组件、设置日志限制等关键步骤。针对国内用户常见的 Docker 镜像拉取失败问题,提供了两种实用解决方案:配置镜像加速器或通过代理访问官方源,并附带验证方法与排错指南,帮助读者高效完成 Docker 环境部署。

寒水馨 · 轻量级技术文档 · hanshuixin.org 1718

【WRF-Urban】URBPARM_LCZ.TBL 查找表解释及内容

URBPARM_LCZ.TBL 查找表解释及内容

WW、forever的博客 1754

UC故事 2011/12/09 总结与计划(续5)

1. 近日总结 * 各种不同的Event CEventAsyncConnect(m2n) CEventOnConnectIndication(n2m)               Q:这个event特别多,周期性的?   知道了,因为连server不通,反复尝试。 CEventStartListen CEventCancelConnect CRtEventDelet

printf1998的专栏 444

【Bug已解决】Claude Code WebFetch 报错 Unable to verify if domain is safe to fetch 解决方案

方案适用场景推荐指数放行域名校验接口根本解决方式,需要网络管理员配合⭐⭐⭐⭐⭐curl 手动验证具体拦截环节精确定位问题,避免排查方向跑偏⭐⭐⭐⭐⭐排查企业 SSL 中间人代理证书企业统一代理策略较严格的环境⭐⭐⭐⭐检查系统时间准确性排除证书有效期误判的可能性⭐⭐⭐手动复制内容作为过渡方案网络策略调整周期较长的场景⭐⭐⭐报错的本质是**WebFetch。

一键难忘的博客 4501

UC故事2011/12/07 总结与计划 (续2)

1. 总结 * CRtReactorBase::ProcessHandleEvent 此函数实际将两件事混在一起了,以后应该重构: a) Event Queue的事件处理 b) 网络socket的处理 Q:是否只有network thread才会处理b)?查一下ProcessHandleEvent的引用地方? * 最终与server建立连接的地方:CRtConnectorT

printf1998的专栏 356

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

UC故事 05/10/2011 杂记

1. Client启动的Access Violation问题 依然如故,看来和complete build没有关系。   2. Office,重启server,error如下:   $20110510 07:43:42.921 3408/3236 ERROR: CRtAcceptorTcp::StartListen, bind() failed! addr=172.16.14.6 por

printf1998的专栏 298

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

UC故事2011/11/18

### 研读核心类 1. ConfManage 2. CMainFrame 3. CXXXView   Q:有时找不到标识符定义?      A:应该是因为相关DLL的符号表在build时未导入(即使用Release而非Debug方式build的) 2011/12/02 Q:有时不能设断点?      A:应该是相关DLL尚未load  2011/12/02 Q:CD

printf1998的专栏 290

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

UC故事 回顾 2012/04/05

1.短期计划(1个月) * 重读所有文档 * 重读所有Blog * conference client/server build for windows/linux *  代码走读     # Session层代码     # GC/Info Server 关键代码     # Android/iOS代码     # Client代码 * 跨平台设计启动   2. 读bl

printf1998的专栏 583

各种软件背后的故事

总结来说,虽然蛋仔派对的具体创始人名字可能未被广泛宣传,但其背后的推动力量无疑是网易及其领导层,尤其是丁磊作为网易的核心人物,对于网易旗下所有产品的成功都有着不可忽视的作用。张一鸣的故事是一个典型的白手起家的成功案例,他通过不断探索和努力,最终打造了一个影响世界的科技帝国。总之,刘刚的故事是一个关于坚持自我、追求技术极致的故事,他带领火绒安全走出了一条与众不同的道路,在竞争激烈的网络安全领域中树立了自己的品牌。的故事,他通过自己的努力和智慧,不仅实现了个人的价值,也为社会的进步做出了重要贡献。

sl824200的博客 1316

移动浏览器成巨头新角力场

来源:北京商报作者:张绪旺2013-1-23 7:14:34行业:移动应用 占据移动互联网最重要入口位置的移动浏览器行业走进2013:入局者已经就位,分羹绝不是平分,巨头游戏的垄断特性只增不减。   巨头当道   浏览器,具体到移动浏览器,只是整个互联网行业的微小分支,但却吸引了诸多从业公司的目光,老牌公司UC优视、欧朋以此为生,新生代创业公司海豚、天天以此为志,还不乏腾讯、百度这样将之作为业

715

他是程序员出身,做了一款最遭人“恨”的App,挑战张小龙!

作者:流水不争先编辑:Emma来源|技术领导力(ID:jishulingdaoli)“嘀嘀,嘀嘀”,无论何时何地,打工人最怕听到的声音,就是钉钉的消息提示音,一听到它就立刻肾上腺素飙...

技术领导力 1203

WeWork遭遇IPO滑铁卢,共享办公行业最大危机被揭开

来源:腾讯深网(qqshenwang)丨作者:相欣数据猿官网 | www.datayuan.cn今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看...

数据猿 946

《罗永浩打脸罗永浩》、MPEG召集人辞职称MPEG将不再存在、Zoom免费用户将没有端到端加密|Decode the Week...

Decode the Week≠音视频技术周刊01罗永浩登GQ智族六月刊封面对自己发出“打脸”拷问图片来源:智族GQ六月刊封面在智族GQ新一期“GQ不可能的采访”——《罗永浩打脸...

LiveVideoStack 1711

中文互联网正在被AI污染

苦低质内容久矣的中文互联网雪上加霜。

modernai的博客 374

总结一下关于UC方面的问题 2011/09/11

* 音频数据优先级 音频与其它数据分不同的Connection在传输,无论其是否使用UDP,都不可能控制其相对于其它数据的优先级 目前要保障音频优先级的唯一方法是在网络设备层保障 * 纯HTML5方案中server端的变化 需要自己开发WebSocket服务器 需要的时候,仍可做成分级分布式集群 * 服务器的接口 Q:可能做出一个服务器接口让第三方调用否? A:

printf1998的专栏 3171

读书与UC

1.读书Windows Programming V2 Q:AFX_MODULE_THREAD_STATE对于模块和线程都是私有的,如何理解? Q:windows book P176:AfxCallWndProc()如何处理多个消息处理嵌套的? Q:以下代码 /////////////////////////////////////////////// // CMyApp成员函数的实现代码

printf1998的专栏 1828

UC故事 05/09/2011

Office   1. 修改IP后,启动Client/Server,均现“重新连接” 2. 重启动后,一个Client连接成功,另一个仍“重新连接”。 查看错误信息,有如下:   $20110509 14:39:09.296 2016/1616 info: CConfManage::OnJoinConferenceConfirm $20110509 14:39:09.296 201

printf1998的专栏 1091
上一篇: UC故事2011/12/07 总结与计划 (续2)
下一篇: UC故事 2011/12/09 总结与计划(续5)
printf1998
博客等级 码龄16年 14粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值