我在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 ,程序不会出现上述的异常!!!