Mercurial > hg > svcore
comparison base/FileReadThread.h @ 95:040a151d0897
* Add file reader thread, and make the matrix file code use it to preload
fft cache data without glitching
author | Chris Cannam |
---|---|
date | Thu, 04 May 2006 13:59:57 +0000 |
parents | |
children | 1aebdc68ec6d |
comparison
equal
deleted
inserted
replaced
94:5b8392e80ed6 | 95:040a151d0897 |
---|---|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ | |
2 | |
3 /* | |
4 Sonic Visualiser | |
5 An audio file viewer and annotation editor. | |
6 Centre for Digital Music, Queen Mary, University of London. | |
7 This file copyright 2006 Chris Cannam. | |
8 | |
9 This program is free software; you can redistribute it and/or | |
10 modify it under the terms of the GNU General Public License as | |
11 published by the Free Software Foundation; either version 2 of the | |
12 License, or (at your option) any later version. See the file | |
13 COPYING included with this distribution for more information. | |
14 */ | |
15 | |
16 #ifndef _FILE_READ_THREAD_H_ | |
17 #define _FILE_READ_THREAD_H_ | |
18 | |
19 #include <QThread> | |
20 #include <QMutex> | |
21 #include <QWaitCondition> | |
22 | |
23 #include <map> | |
24 #include <set> | |
25 | |
26 #include <stdint.h> | |
27 | |
28 class FileReadThread : public QThread | |
29 { | |
30 Q_OBJECT | |
31 | |
32 public: | |
33 FileReadThread(); | |
34 | |
35 virtual void run(); | |
36 virtual void finish(); | |
37 | |
38 struct Request { | |
39 int fd; | |
40 QMutex *mutex; // used to synchronise access to fd; may be null | |
41 off_t start; | |
42 size_t size; | |
43 char *data; // caller is responsible for allocating and deallocating | |
44 }; | |
45 | |
46 virtual int request(const Request &request); | |
47 virtual void cancel(int token); | |
48 | |
49 virtual bool isReady(int token); | |
50 virtual bool isCancelled(int token); // and safe to delete | |
51 virtual bool getRequest(int token, Request &request); | |
52 virtual void done(int token); | |
53 | |
54 signals: | |
55 void ready(int token, bool successful); | |
56 void cancelled(int token); | |
57 | |
58 protected: | |
59 int m_nextToken; | |
60 bool m_exiting; | |
61 | |
62 typedef std::map<int, Request> RequestQueue; | |
63 RequestQueue m_queue; | |
64 RequestQueue m_cancelledRequests; | |
65 RequestQueue m_readyRequests; | |
66 std::set<int> m_newlyCancelled; | |
67 | |
68 QMutex m_mutex; | |
69 QWaitCondition m_condition; | |
70 | |
71 void process(); | |
72 void notifyCancelled(); | |
73 }; | |
74 | |
75 #endif |