我在GUI 进程中创建了一个线程,使用QThread 类创建,run的实现如下:
MyThread::run()
{
int sval = 0;
while(1)
{
qDebug("wait sem----------");
sem_wait(sem_KeypressEventFromClint); //等待其他进程发来的消息
sem_getvalue(sem_KeypressEventFromClint,&sval);
qDebug("sem value = %d\n",sval);
}
}
程序运行时,调试信息显示:wait sem---------- 这时候应该没问题;
然后我在GUI 进程的
Desktop::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
case Qt::Key_K:
qDebug("key press K");
system("echo $PWD");
break;
}
}
我按K键,调用system()函数:我没有发送sem_post(sem_KeypressEventFromClint); 的消息;
现在问题来了:
调试结果显示:程序有发了一次sem_KeypressEventFromClint消息的动作(不知道哪来的,我发这个消息的程序这时还没让它执行呢!);
并且这消息动作,有时候有,有时候又没有!!!
请问各位大虾,这是怎么回事?
我又做了个测试:
把system("echo $PWD"); 改为 fork + execl ,程序不会出现上述的异常!!!