当前位置: 技术问答>linux和unix
c++ 多线程控制问题
来源: 互联网 发布时间:2016-10-28
本文导语: 主线程创建一个子线程,然后子线程调用 pthread_cond_wait()挂起; 主线程调用 pthread_cond_signal()换起子线程! 问题是主线程pthread_cond_signal() 执行了,但子线程没有被换起。 另外 myRtspServer 是类名, pthread_m...
主线程创建一个子线程,然后子线程调用 pthread_cond_wait()挂起;
主线程调用 pthread_cond_signal()换起子线程!
问题是主线程pthread_cond_signal() 执行了,但子线程没有被换起。
另外 myRtspServer 是类名,
pthread_mutex_t condition_mutex;
pthread_cond_t condition_cond;
bool isStopStreamer;
bool isWaitingWakeup;
都是类的私有变量。
程序如下:
主线程调用 pthread_cond_signal()换起子线程!
问题是主线程pthread_cond_signal() 执行了,但子线程没有被换起。
另外 myRtspServer 是类名,
pthread_mutex_t condition_mutex;
pthread_cond_t condition_cond;
bool isStopStreamer;
bool isWaitingWakeup;
都是类的私有变量。
程序如下:
//子线程
void* myRtspServer::StartG711RtpThread(void* arg)
{
printf("in StartG711RtpThreadn");
int ret;
myRtspServer* g711RtpServer = (myRtspServer*)arg;
for(;;)
{
ret = pthread_mutex_lock( &g711RtpServer->Return_condition_mutex() );
if(ret == 0)
{
printf("pthread_mutex_lock sucessn");
}
if(g711RtpServer->Return_isStopStreamer() == true)
{
g711RtpServer->Set_isWaitingWakeup(true);
printf("begin to wait for the conditionsn");
ret = pthread_cond_wait( &g711RtpServer->Return_condition_cond(), &g711RtpServer->Return_condition_mutex());
if(ret == 0)
{
printf("pthread_cond_wait sucessn");
}
printf("get the conditionsn");
g711RtpServer->Set_isWaitingWakeup(false);
}
ret = pthread_mutex_unlock( &g711RtpServer->Return_condition_mutex());
if(ret == 0)
{
printf("pthread_mutex_unlock sucessn");
}
g711RtpServer->Return_g711RtpStreamer()->DealWithG711Rtp();
g711RtpServer->Return_g711RtpStreamer()->IncreaseTimeStamp(320);
usleep(35000);
}
pthread_exit(NULL);
}
//主线程
void myRtspServer::DoEventLoop()
{
//开线程---
int ret;
pthread_t id2;
ret=pthread_create(&id2,NULL,StartG711RtpThread,this);
if(ret!=0)
{
printf ("Create pthread error!n");
exit (1);
}
printf("create StartG711RtpThread sucessfuln");
for(;;)
{
InitSelect();
OnSelect();
if(sessionChain->ReturnSession_Counter() == 0)
{
printf("non connection is existn");
isStopStreamer = true;
}
pthread_mutex_lock( &condition_mutex );
if( isWaitingWakeup == true )
{
printf("begin to send signaln");
ret = pthread_cond_signal( &condition_cond );
if(ret == 0)
{
printf("pthread_cond_signal sucessn");
}
}
pthread_mutex_unlock( &condition_mutex );
}
//sessionChain->PrintfTest();
}
|
返回类的私有成员是破坏类的封装性,最好不要这样做
|
帮顶一下先,
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。