64,282
社区成员
发帖
与我相关
我的任务
分享
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}
auto item = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCallback,this));
auto menu = Menu::create(item,nullptr);
this->addChild(menu);
return true;
}
void HelloWorld::onEnter()
{
Layer::onEnter();
pthread_create(&thread_id,nullptr,threadCallback,this);
}
void * HelloWorld::threadCallback(void *)
{
// signal(SIGQUIT,signalCallback);
while(1)
{
signal(SIGQUIT,signalCallback);
sleep(1);
log("run");
}
}
void HelloWorld::signalCallback(int)
{
log("signal call back");
pthread_exit(nullptr);
}
void HelloWorld::menuCallback(Ref * ref)
{
int ret = pthread_kill(thread_id,SIGQUIT);
// int ret = pthread_cancel(thread_id);
if(ret == 0)
log("send success!");
else if(ret == ESRCH)
log("the thread did not exist or already quit");
else if(ret == EINVAL)
log("signal is inval");
}
void HelloWorld::onEnter()
{
Layer::onEnter();
pthread_create(&thread_id,nullptr,threadCallback,this);
}
void * HelloWorld::threadCallback(void *)
{
signal(SIGUSR1,signalCallback);
struct sigaction act;
act. sa_handler = signalCallback;
sigemptyset(&act. sa_mask); //清空此信号集
act.sa_flags = 0;
sigaction(SIGQUIT, &act, nullptr);
// signal(SIGQUIT,signalCallback);
while(1)
{
sleep(1);
i++;
}
}
void HelloWorld::signalCallback(int)
{
log("signal call back");
pthread_exit(nullptr);
}
void HelloWorld::menuCallback(Ref * ref)
{
int ret = pthread_kill(thread_id,SIGUSR1);
// int ret = pthread_cancel(thread_id);
if(ret == 0)
log("send success!");
else if(ret == ESRCH)
log("the thread did not exist or already quit");
else if(ret == EINVAL)
log("signal is inval");
}