thread management fixed.
[scilab.git] / scilab / modules / ast / includes / types / threadId.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - INRIA - Bruno JOFRET
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #ifndef __THREADID_HH__
14 #define __THREADID_HH__
15
16 #include "internal.hxx"
17
18 extern "C"
19 {
20 #include "Thread_Wrapper.h"
21 }
22
23 namespace types
24 {
25 class EXTERN_AST ThreadId : public InternalType
26 {
27 public :
28     ThreadId(__threadId _id, __threadKey _key);
29     virtual                 ~ThreadId();
30
31     bool                    isThreadId()
32     {
33         return true;
34     }
35     bool                    toString(std::wostringstream& ostr);
36
37     /* return type as string ( double, int, cell, list, ... )*/
38     virtual std::wstring    getTypeStr()
39     {
40         return L"ThreadId";
41     }
42     /* return type as short string ( s, i, ce, l, ... )*/
43     virtual std::wstring    getShortTypeStr()
44     {
45         return L"tid";
46     }
47     InternalType*           clone();
48
49     __threadId              getThreadId();
50     void                    setThreadId(__threadId _id);
51     __threadKey             getKey();
52     void                    setKey(__threadKey _key);
53
54     /*
55     ** Status
56     */
57     enum Status
58     {
59         Running,
60         Paused,
61         Aborted,
62         Done
63     };
64
65     Status                  getStatus();
66     void                    setStatus(Status _status);
67
68     void                    suspend();
69     void                    resume();
70     void                    abort();
71
72     void                    setInterrupt(bool _doInterrupt);
73     bool                    getInterrupt();
74
75     void                    setInterruptible(bool _isInterruptible);
76     bool                    isInterruptible();
77
78     void                    setConsoleCommandFlag(bool _isConsoleCommand);
79     bool                    isConsoleCommand();
80
81 private :
82     std::wstring            StatusToString(Status _status);
83
84 protected :
85     inline ScilabType       getType()
86     {
87         return ScilabThreadId;
88     }
89     inline ScilabId         getId()
90     {
91         return IdThreadId;
92     }
93
94
95 private :
96     __threadId              m_threadId;
97     __threadKey             m_threadKey;
98     __threadLock            m_threadLock;
99     Status                  m_threadStatus;
100     bool                    m_doInterrupt;
101     bool                    m_isInterruptible;
102     bool                    m_isConsoleCommand;
103 };
104 }
105 #endif /* !__THREADID_HH__ */