📄 task.h
字号:
#ifndef __TASK_H#define __TASK_H#include <pthread.h>#include <sys/time.h>#include <time.h>#include <string.h>#include "dget.h"#ifdef USE_QT#include "listviews.h"#include <qobject.h>#endif#include "Url.h"#include "dLog.h"#define MAXTHREADS 10typedef enum { IDLE, CONNECTING, LOGGININ, DOWNLOADING, ALLDONE, LOGINFAIL, CONREJECT, REMOTEFATAL, LOCALFATAL, TIMEDOUT, MAXTRYS, UNKNOWN}ThreadStatus; extern const char * ThreadStatusList[];typedef void * (*ThreadFunc)(void *);class TTask;class TThread;extern void FtpThread(TThread * This);extern void HttpThread(TThread * This);class TThread{public: pthread_t ThreadId; char Name[10]; TUrl * u; ThreadStatus Status; TTask * Task; // Owner of Thread char * LocalFile; char * FileMode; long BlkSize; //float AvgSpeed; long RemoteStartPos; long RemoteEndPos; long RemoteBytesReceived; long LocalStartPos; struct timeval BeginTime; struct timeval EndTime; struct timeval RetryStart; bool Retry; int TryAttempts; int Retval;public: TThread( void ); virtual ~TThread( void ); TThread* Self( void ); virtual bool Init( void ); virtual void Run( void ); virtual int Exit( void ); friend void* StartThread( void* ); };typedef enum { RUNNING, FINISHED, START, STOP, DEAD}TaskStatus; class TTask : public QObject{ Q_OBJECTprivate : char Name[16]; int Prio; int Policy; TaskStatus ts; int ThreadCnt; RunMode Mode; // TTaskManager * TaskMgr; // owner of Task char FilePath[1024]; long TimeOfCost; // Time of ExecTask struct timeval dlStartTime; struct timeval dlEndTime; //protect Thread Status after mutiple Thread Exec pthread_mutex_t StatusMutex; pthread_cond_t ConnectingCond; public: TThread * ThreadQue[MAXTHREADS]; TLog * plog; //Loginfo relate to Task TUrl * u; ThreadFunc fn; #ifdef USE_QTpublic slots: void RefreshDisplay();#endif#ifdef USE_QTpublic: ListViews * lvs; Message * msg; QListView * messages; QListView * ThreadMsgs; QTimer * timer;#endif public: TTask(int n); ~TTask(void);// TTaskManager * GetTaskMgr() { return TaskMgr; } char * GetTaskName() { return Name; } void SetTaskName(char * s) { strcpy(Name, s);} int GetTaskPrio() { return Prio; } void SetTaskPrio(int) {} TaskStatus GetTaskStatus() { return ts; } void SetTaskStatus(TaskStatus s) { ts = s; } void SetOutFilePath( char * Path ) { strcpy(FilePath, Path); } char * GetOutFilePath( void ) { return FilePath; } /*********************************************************/ int CreateThread(TThread * This, ThreadFunc fn); void JoinThread(TThread * This); void CancelThread(TThread * This); void ExitThread(TThread * This); void SupendThread(TThread * This); void ResumeThread(TThread * This); void LockThread(TTask * This); void UnlockThread(TTask * This); void ThreadWaitCond(TTask * This); void BroadcastCond(TTask * This); /********************************************************/ float GetCurThreadAvgSpeed(TThread * This); float GetTotalAvgSpeed(void); float GetCurThreadPercent(TThread * This); const char * GetCurThreadStatus(TThread * This); float GetCurThreadBlkSize(TThread * This); float GetCurThreadBytesReceived(TThread * This); long GetTotalBytesReceived(void); long GetAllRemoteBytesReceived(void); long GetAllLocalBytesReceived(void); long GetEstTime(long BytesLeft, float CurSpeed); void SetdlStartTime(void); void SetdlEndTime(void); long GetTotalCostTime(void); bool IsAllCompleted(void); bool IsAllLoginFailed(void); bool IsAllConnRejected(void); bool IsAllRemoteFailed(void); int GetThreadCnt(void) const; int QueryAllDoneCnt(void); int QueryConnectingCnt(void); int QueryLoggingCnt(void); int QueryDownloadingCnt(void); int QueryLoginfailCnt(void); int JoinDownloads( void ); int DeleteDownloads( void ); void InitThreads(TUrl * u, long FileSize, char * FileMode); int ExecDownloads( ThreadFunc fn ); void SetMode(RunMode val); int ResumeModifyFtpSingleConn(TThread * tp); int ResumeModifyFtpConns(void); int ResumeModifyHttpSingleConn(TThread * tp); int ResumeModifyHttpConns(void); int HandleThreads(ThreadFunc fn); void DoInterface(); void TerminateThreads(void);};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -