1 / 21
文档名称:

Qt多线程编程.doc

格式:doc   大小:350KB   页数:21页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Qt多线程编程.doc

上传人:小s 2022/4/17 文件大小:350 KB

下载得到文件列表

Qt多线程编程.doc

文档介绍

文档介绍:24 }
24 }
24 }
24 }
Qt 线程类
Qt 包含下面一些线程相关的类:
QThread 提供了开始一个新线程的方法
QThreadStorage 提供逐线程数据存储
QMu3
mutex. lock ();
4
5
int retVal = 0 ;
6
7
switch (flag) {
8
case 0 :
9
case 1 :
10
();
11
return moreComplexFunction(flag);
12
case 2 :
13
{
14
int status = anotherFunction()
15
if (status < 0 ) {
16
();
17
return - 2 ;
18
}
19
retVal = status + flag;
20
}
21
break ;
22
default :
23
if (flag > 10 ) {
24
();
25
return - 1 ;
26
}
27
break ;
28
}
29
();
return retVal;
}
This example increases the likelihood that errors will QMutexLocker greatly simplifies the code, and makes it more readable:
1
int
complexFunction( int
flag)
2
{
3
QMutexLocker locker( & mutex);
4
5
int retVal = 0
)
6
7
switch (flag) {
8
case 0 :
9
case 1 :
10
return moreComplexFunction(flag);
11
case 2 :
12
{
13
int status
= anotherFunction()
14
if (status
< 0 )
15
return
- 2 ;
16
retVal =
status + flag;
17
}
18
break ;
19
default :
20
if (flag >
10 )
21
return -
1 ;
22
break ;
23
}
24
25
return retVal;
26
}
Now, the mutex will always be unlocked when the QMutexLocker object is destroyed (when the function returns since locker is an auto variable) . 即使在抛出异常的情况下也可以使用。
QReadWriteLock
用 mutex 进行线程同步有一个问题就是 mutex 只允许某个时刻只允许一个线程对共享资 源进行访问, 如果同时有多个线程对共享资源进行读访问, 而只有一个写操作线程, 那么在 这种情况下如果采用 mutex 就成为程序运行性能的瓶颈了。在这种情况下 Qt 下采用
29
QReadWriteLock 来实现多个线程读,一个线程写。写线程执行的时候会阻塞所有的读线程, 而读线程之间的运行不需要进行同步。
MyData data;
QReadWriteLock lock ;
void ReaderThread::run()
{
5
lock .lockForRead();
access_data_without_modifying_it( & data);
lock .unlock();
9
}
void WriterThread::run()
{
13
lock .lockForWrite();
modify_data( & data);
lock .unlock();
17
18 }