求教SYMBIAN里面如何同时启动音频流处理线程和SOCKET连接线程!!!!!!!!!!!!!!!!!!!!!!!

garping 2008-01-22 10:51:56
我现在用 virtual void MaoscOpenComplete(TInt aError);
virtual void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer);
virtual void MaoscPlayComplete(TInt aError);
这三个虚拟函数实现音频流处理,但我同时也用一个线程来启动Socket连接,如下:
TInt CHelloWorldBasicAppUi::StartDecoderMP3Thread(TAny *aPtr)
{
CHelloWorldBasicAppUi* DecoderPtr = static_cast<CHelloWorldBasicAppUi*>(aPtr);
DecoderPtr->StartConnectServer();
return 0;
}

void CHelloWorldBasicAppUi::StartThreadL()
{
RThread ThreadOne;
User::LeaveIfError(ThreadOne.Create( _L("Decodermp3thread") , StartDecoderMP3Thread,
KDefaultStackSize, KMinHeapSize, 256*KMinHeapSize,this));
ThreadOne.Resume();
}
void CHelloWorldBasicAppUi::StartConnectServer()
{
iMediaSocket->ConnectServer(_L("61.195.219.98"),7777);
}
但Socket连接时出现错误,如果不用线程启动是没有问题的,即是说直接iMediaSocket->ConnectServer(_L("61.195.219.98"),7777);是没有问题的。

现在请高手指教如何用一个线程来启动Socket连接,请列出具体代码,谢谢!!
...全文
134 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yourwonder 2010-12-21
  • 打赏
  • 举报
回复
RSocketServ::ShareAuto();
调用这个函数才能跨线程使用socket。
shouwang105 2009-03-06
  • 打赏
  • 举报
回复
我也遇到和楼主一样的问题,我新建了线程,在线程里也创建了清洁栈和CActiveScheduler,
并且启动了CActiveScheduler,而且在该线程里活动对象也可以调用,
但是在该活动对象的调用中使用Socket时就出异常,异常代码是E32User-CBase 46.
yinquan2102 2008-02-23
  • 打赏
  • 举报
回复
你对活动对象的理解还没到位,可能是API调用上的问题,也或者是Sokcet使用方法不到位。贴出错误的Panic来吧。
yinquan2102 2008-02-23
  • 打赏
  • 举报
回复
你用的Connect(),和RecvOneOrMore的用法不符合Symbian用法,它们都是异步提供者,带有TRequestStatus参数,所以要用活动对象封装Connect的RecvOneOrMore。你现在是自己来维护,从Symbian开发观点来看,要把这些交由活动对象及活动调度器来维护。不然很容易出错。
再有有了问题要看系统的Panic,对照SDK上面的Panic提示来找错误,来提问题,如果没有错误提示如何找到错误。
dyw 2008-01-25
  • 打赏
  • 举报
回复
解决了吗?刚看到楼主回帖。发生错误时,要看系统给的错误代码进行分析。
如果已经解决,可否分享一下?
garping 2008-01-23
  • 打赏
  • 举报
回复
请问如何用线程启动Socket连接呀,现在运行到Connect(iaddr,iport)就出错了。
怎么一个人影都没有的呢?
garping 2008-01-23
  • 打赏
  • 举报
回复
应该是不关代码的问题,因为我不用线程启动连接是没有问题的,一用线程来启动就有问题》如果你真的想看代码,如下:
TInt nPort=7777;
TInetAddr addr;
TUint32 aAddr;

if ( addr.Input( connIP ) == KErrNone )
{
// server name is already a valid ip address
aAddr = addr.Address();
iAddress.SetPort( nPort );
iAddress.SetAddress( aAddr );
iAddress.SetFamily( KAfInet );

}

// Initiate socket connection
MediaSock.Connect( iAddress, status );
User::WaitForRequest(status);
if(status != KErrNone)
{
_
sockSrv.Close();

}

do
{


MediaSock.RecvOneOrMore(iMsgBuf,0,status,len);
User::WaitForRequest(status);


}while(status==KErrNone);
dyw 2008-01-23
  • 打赏
  • 举报
回复
什么错误信息?也没看到你的Connect代码。

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧