下面是我总结的两种子线程的工作方式,发表了我自己理解的各自的优缺点,我也正因此苦恼,希望是我自己理解错了,不知有没有高人指点下
(子线程对象在gui线程实现)
1.让子线程进入事件循环,等待主线程的信号,但是这些子线程的槽函数都是在该子线程对象所在的线程(在这里也就是主线程)执行,这样似乎失去了多线程的意义。
void run()
{
exec();
}
void slot1(); //处理工作
void slot2(); //处理工作
...
2.子线程没有事件循环,直接在run里处理工作,主线程可通过信号连接到该子线程的槽来控制flag,从而控制子线程的暂停和继续。
但是,如果还有另外几个线程不时地向通过slot2()给somarg赋值的话,即使给slot2()加了锁保证了不会被同时赋值,但那些同时
进入的赋值信号没有队列可进,这样会不会就丢失了呢
void run()
{
while(1)
{
while(flag)
{
dosomething(somarg);
}
}
}
void slot1(); //控制flag
void slot2(); //给somarg赋值
...