基于qt,msvc2017-64bits,ffmpeg.opengl的播放器
zhangmeng
2021-03-03 4a6d9312cc1c9d62d66c4def71246d9faae29edb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef FUNCTIONTRANSFER_H
#define FUNCTIONTRANSFER_H
 
#include  <functional>
 
#include <QThread>
#include <QObject>
 
//#ifdef QT_NO_KEYWORDS
//#define signals Q_SIGNALS
//#define slots Q_SLOTS
//#define emit Q_EMIT
//#endif
 
class FunctionTransfer : public QObject
{
    Q_OBJECT
public:
 
    ///@brief ¹¹Ô캯Êý
    explicit FunctionTransfer(QObject *parent = 0);
    ~FunctionTransfer();
 
    static void init(Qt::HANDLE id);
    static bool isMainThread();
 
public:
    ///@brief Öƶ¨º¯ÊýfÔÚmainÖÐÖ´ÐÐ
    static void runInMainThread(std::function<void()> f, bool isBlock = false);
 
private:
    static Qt::HANDLE gMainThreadId;
 
    //ÔÚÈ«¾ÖÊý¾ÝÇøÊµÀý»¯Ò»¸öFunctionTransferµÄʵÀý£¬¸ÃʵÀýËùÔÚµÄÏ߳̾ÍÊÇÖ÷Ï̡߳£
    static FunctionTransfer *main_thread_forward;
 
Q_SIGNALS:
    ///@brief ÔÚ±ðµÄÏß³ÌÓк¯Êý¶ÔÏó´«À´
    void comming(std::function<void()> f);
    void comming_noBlock(std::function<void()> f);
 
private Q_SLOTS:
    ///@brief Ö´Ðк¯Êý¶ÔÏó
    void slotExec(std::function<void()> f);
 
};
 
#endif // FUNCTIONTRANSFER_H