何刪除定時(shí)器?MyLibco協(xié)程網(wǎng)絡(luò)庫定時(shí)器的設(shè)計(jì)
時(shí)間戳類(基本摘自muduo)
//Timestamp.h
namespace Tattoo{class Timestamp{public: Timestamp(); explicit Timestamp(int64_t microSecondsSinceEpoch); void swap(Timestamp &that) {std::swap(microSecondsSinceEpoch_, that.microSecondsSinceEpoch_); } std::string toString() const; std::string toFormattedString() const; //微妙大于0就是 valid 的 bool valid() const {return microSecondsSinceEpoch_ > 0; } int64_t microSecondsSinceEpoch() const {return microSecondsSinceEpoch_; } //微秒轉(zhuǎn)化為秒 time_t secondsSinceEpoch() const {return static_cast(microSecondsSinceEpoch_ / kMicroSecondsPerSecond); } //得到現(xiàn)在的時(shí)間 static Timestamp now(); //獲取一個(gè)無效時(shí)間,即時(shí)間等于0 static Timestamp invalid(); //一百萬,一微秒等于百萬分之一秒 static const int kMicroSecondsPerSecond = 1000 * 1000; private: int64_t microSecondsSinceEpoch_;};// 這里重載 < 號(hào),在下文的multimap 中就會(huì)用到inline bool operator<(Timestamp lhs, Timestamp rhs){return lhs.microSecondsSinceEpoch() < rhs.microSecondsSinceEpoch();}inline bool operator==(Timestamp lhs, Timestamp rhs){return lhs.microSecondsSinceEpoch() == rhs.microSecondsSinceEpoch();}將返回兩個(gè)事件時(shí)間差的秒數(shù),注意單位!inline double timeDifference(Timestamp high, Timestamp low){int64_t diff = high.microSecondsSinceEpoch() - low.microSecondsSinceEpoch(); return static_cast(diff) / Timestamp::kMicroSecondsPerSecond;}//把秒轉(zhuǎn)化為微秒,構(gòu)造一個(gè)對(duì)象,再把它們的時(shí)間加起來,構(gòu)造一個(gè)無名臨時(shí)對(duì)象返回inline Timestamp addTime(Timestamp timestamp, double seconds){int64_t delta = static_cast(seconds * Timestamp::kMicroSecondsPerSecond); return Timestamp(timestamp.microSecondsSinceEpoch() + delta);}} // namespace Tattoo
(資料圖片僅供參考)
//Timestamp.cpp
using namespace Tattoo;Timestamp::Timestamp() : microSecondsSinceEpoch_(0){}Timestamp::Timestamp(int64_t microseconds) : microSecondsSinceEpoch_(microseconds){}std::string Timestamp::toString() const{char buf[32] = {0}; int64_t seconds = microSecondsSinceEpoch_ / kMicroSecondsPerSecond; int64_t microseconds = microSecondsSinceEpoch_ % kMicroSecondsPerSecond; //PRId64跨平臺(tái)打印64位整數(shù),因?yàn)閕nt64_t用來表示64位整數(shù),在32位系統(tǒng)中是long long int,64位系統(tǒng)中是long int //所以打印64位是%ld或%lld,可移植性較差,不如統(tǒng)一同PRID64來打印。 snprintf(buf, sizeof(buf) - 1, "%" PRId64 ".%06" PRId64 "", seconds, microseconds); return buf;}//把它轉(zhuǎn)換成一個(gè)格式化字符串std::string Timestamp::toFormattedString() const{char buf[32] = {0}; time_t seconds = static_cast(microSecondsSinceEpoch_ / kMicroSecondsPerSecond); int microseconds = static_cast(microSecondsSinceEpoch_ % kMicroSecondsPerSecond); struct tm tm_time; gmtime_r(&seconds, &tm_time); snprintf(buf, sizeof(buf), "%4d%02d%02d %02d:%02d:%02d.%06d", tm_time.tm_year + 1900, tm_time.tm_mon + 1, tm_time.tm_mday, tm_time.tm_hour, tm_time.tm_min, tm_time.tm_sec, microseconds); return buf;}Timestamp Timestamp::now(){struct timeval tv; gettimeofday(&tv, NULL); //獲得當(dāng)前時(shí)間,第二個(gè)參數(shù)是一個(gè)時(shí)區(qū),當(dāng)前不需要返回時(shí)區(qū),就填空指針 int64_t seconds = tv.tv_sec; //取出秒數(shù) return Timestamp(seconds * kMicroSecondsPerSecond + tv.tv_usec);}Timestamp Timestamp::invalid(){return Timestamp();}
定時(shí)器
在這里,我是直接讓協(xié)程在一段時(shí)間之后喚醒即可(runAfter),至于需不需要 repeat ,這個(gè)我也在思考當(dāng)中,以后了解到了再加吧!!學(xué)習(xí)也就是一點(diǎn)一點(diǎn)積累的過程啦!!! //Timer.h
/*定時(shí)器類*/class Timer{public: Timer(Timestamp when); Timestamp expiration() const {return expire_; } void run() const; Timestamp expire_; //任務(wù)的超時(shí)時(shí)間 Routine_t *timer_rou_;};
//Timer.cpp
Timer::Timer(Timestamp when) : timer_rou_(get_curr_routine()), //一個(gè)定時(shí)器對(duì)應(yīng)一個(gè)協(xié)程 expire_(when){}void Timer::run() const{cout << "由定時(shí)器喚醒對(duì)應(yīng)協(xié)程" << endl; timer_rou_->Resume();}
定時(shí)器容器
.h 文件
class TimeHeap{public: TimeHeap(EventLoop *loop); ~TimeHeap(); Timer *addTimer(Timestamp when); void delTimer(Timer *timer); private: typedef std::pairEntry; typedef std::multimapTimerMap; // 超時(shí)之后的可讀回調(diào) void handleRead(); std::vectorgetExpired(Timestamp now); /* 重置超時(shí)的定時(shí)器 */ void reset(const std::vector&expired, Timestamp now); bool insert(Timer *timer); EventLoop *loop_; const int timerfd_; Channel timerfdChannel_; TimerMap timers_;};
.cpp 文件
namespace Tattoo{namespace detail{//創(chuàng)建 timerfdint createTimerfd(){int timerfd = ::timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC); if (timerfd < 0) {std::cout << "Failed in timerfd_create" << std::endl; } return timerfd;}/* 計(jì)算超時(shí)時(shí)間與當(dāng)前時(shí)間的時(shí)間差,并將參數(shù)轉(zhuǎn)換為 api 接受的類型 */struct timespec howMuchTimeFromNow(Timestamp when){/* 微秒數(shù) = 超時(shí)時(shí)刻微秒數(shù) - 當(dāng)前時(shí)刻微秒數(shù) */ int64_t microseconds = when.microSecondsSinceEpoch() - Timestamp::now().microSecondsSinceEpoch(); if (microseconds < 100) {microseconds = 100; } struct timespec ts; // 轉(zhuǎn)換成 struct timespec 結(jié)構(gòu)返回 // tv_sec 秒 // tv_nsec 納秒 ts.tv_sec = static_cast( microseconds / Timestamp::kMicroSecondsPerSecond); ts.tv_nsec = static_cast( (microseconds % Timestamp::kMicroSecondsPerSecond) * 1000); return ts;}/* 讀timerfd,避免定時(shí)器事件一直觸發(fā) */void readTimerfd(int timerfd, Timestamp now){uint64_t howmany; ssize_t n = ::read(timerfd, &howmany, sizeof(howmany)); std::cout << "TimerQueue::handleRead() " << howmany << " at " << now.toString() << std::endl; if (n != sizeof howmany) {std::cout << "TimerQueue::handleRead() reads " << n << " bytes instead of 8" << std::endl; }}/* 重置 timerfd 的超時(shí)時(shí)間 */void resetTimerfd(int timerfd, Timestamp expiration){struct itimerspec newValue; struct itimerspec oldValue; bzero(&newValue, sizeof newValue); bzero(&oldValue, sizeof oldValue); newValue.it_value = howMuchTimeFromNow(expiration); //到這個(gè)時(shí)間后,會(huì)產(chǎn)生一個(gè)定時(shí)事件 int ret = ::timerfd_settime(timerfd, 0, &newValue, &oldValue); if (ret) {std::cout << "timerfd_settime()" << std::endl; }}} // namespace detail} // namespace Tattoousing namespace Tattoo;using namespace Tattoo::detail;TimeHeap::TimeHeap(EventLoop *loop) : loop_(loop), timerfd_(createTimerfd()), timerfdChannel_(loop, timerfd_), timers_(){// 設(shè)置自己獨(dú)特的回調(diào)函數(shù),并不是和普通的Channel 一樣,直接喚醒了對(duì)應(yīng)的協(xié)程 timerfdChannel_.setHandleCallback( std::bind(&TimeHeap::handleRead, this)); timerfdChannel_.enableReading();}TimeHeap::~TimeHeap(){timerfdChannel_.disableAll(); ::close(timerfd_); for (auto it = timers_.begin(); it != timers_.end(); ++it) {delete it->second; }}/* 添加一個(gè)定時(shí)器 ,返回定時(shí)器指針,會(huì)在 channel->addEpoll 函數(shù)中使用到,因?yàn)橐獎(jiǎng)h除對(duì)應(yīng)的定時(shí)器*/Timer *TimeHeap::addTimer(Timestamp when){Timer *timer = new Timer(when); 如果當(dāng)前插入的定時(shí)器 比隊(duì)列中的定時(shí)器都早 則返回真 bool earliestChanged = insert(timer); //最早的超時(shí)時(shí)間改變了,就需要重置timerfd_的超時(shí)時(shí)間 if (earliestChanged) {//timerfd_ 重新設(shè)置超時(shí)時(shí)間,使得 timerfd 的定時(shí)事件始終是最小的 resetTimerfd(timerfd_, timer->expiration()); } return timer;}/* 刪除一個(gè)定時(shí)器 */void TimeHeap::delTimer(Timer *timer){auto it = timers_.find(timer->expire_); if (it != timers_.end()) {timers_.erase(it); } return;}//timerfd 可讀 的回調(diào)void TimeHeap::handleRead(){Timestamp now(Timestamp::now()); //先讀取 readTimerfd(timerfd_, now); std::vectorexpired = getExpired(now); for (std::vector::iterator it = expired.begin(); it != expired.end(); ++it) {it->second->run(); //run->Resume() } reset(expired, now); //這里主要是改變 timerfd 的定時(shí)最小值}//獲取所有超時(shí)的定時(shí)器std::vectorTimeHeap::getExpired(Timestamp now){std::vectorexpired; auto it = timers_.lower_bound(now); assert(it == timers_.end() || now < it->first); std::copy(timers_.begin(), it, back_inserter(expired)); timers_.erase(timers_.begin(), it); return expired;}void TimeHeap::reset(const std::vector&expired, Timestamp now){Timestamp nextExpire; for (std::vector::const_iterator it = expired.begin(); it != expired.end(); ++it) {delete it->second; } if (!timers_.empty()) //timers_ 不為空 {/*獲取當(dāng)前定時(shí)器集合中的最早定時(shí)器的時(shí)間戳,作為下次超時(shí)時(shí)間*/ nextExpire = timers_.begin()->second->expiration(); } //如果取得的時(shí)間 >0就改變 timerfd 的定時(shí) if (nextExpire.valid()) {resetTimerfd(timerfd_, nextExpire); }}bool TimeHeap::insert(Timer *timer){bool earliestChanged = false; Timestamp when = timer->expiration(); auto it = timers_.begin(); if (it == timers_.end() || when < it->first) {earliestChanged = true; } timers_.insert(std::make_pair(when, timer)); return earliestChanged;}
OK,上面的就是具體的實(shí)現(xiàn)代碼了,下面來說一下幾個(gè)點(diǎn):
1.如何添加定時(shí)器?
在我寫的協(xié)程庫中是這樣實(shí)現(xiàn)的: Channel::addEpoll()->loop_->runAfter(10)->timerHeap_->addTimer()
2.如何刪除定時(shí)器?
loop_->cancel()->timerHeap_->delTimer()
3.如何將timerfd與Eventloop 統(tǒng)一起來?
首先來看一下eventloop:
.h
#include "Callbacks.h"#include "Timestamp.h"#include#include#include "routine.h"namespace Tattoo{class Channel;class Epoll;class TimeHeap;class Timer;class RoutineEnv_t;class EventLoop{public: EventLoop(); ~EventLoop(); void loop(); // timers Timer *runAt(const Timestamp &time); Timer *runAfter(double delay); void cancel(Timer *timer); void updateChannel(Channel *channel); void removeChannel(Channel *channel); private: typedef std::vectorChannelList; Epoll *epoll_; TimeHeap *timerHeap_; ChannelList activeChannels_; RoutineEnv_t *rouEnv_;};} // namespace Tattoo
.cpp
#include#include "Channel.h"#include "Epoll.h"#include "MiniHeap.h"#include "EventLoop.h"using namespace Tattoo;const int kPollTimeMs = 10000; // 10 sEventLoop::EventLoop() : rouEnv_(get_curr_thread_env()), // 一個(gè) eventloop 對(duì)應(yīng)一個(gè) Routine_env epoll_(new Epoll(this)), timerHeap_(new TimeHeap(this)) //在TimeHead初始化時(shí),就會(huì)將 timerfd 加入 epoll 監(jiān)聽中{// std::cout << "EventLoop created " << this << std::endl; rouEnv_->envEventLoop_ = this; //關(guān)鍵點(diǎn)}EventLoop::~EventLoop(){}void EventLoop::loop(){while (1) {activeChannels_.clear(); int ret = epoll_->poll(kPollTimeMs, &activeChannels_); for (auto it = activeChannels_.begin(); it != activeChannels_.end(); ++it) {(*it)->handleEvent(); //事件分發(fā),記得注冊(cè)時(shí)間回調(diào)(一般就是 Resume()) } } std::cout << "EventLoop " << this << " stop looping" << std::endl;}Timer *EventLoop::runAt(const Timestamp &time){return timerHeap_->addTimer(time);}Timer *EventLoop::runAfter(double delay){Timestamp time(addTime(Timestamp::now(), delay)); runAt(time);}void EventLoop::cancel(Timer *timer){timerHeap_->delTimer(timer);}void EventLoop::updateChannel(Channel *channel){epoll_->updateChannel(channel);}void EventLoop::removeChannel(Channel *channel){epoll_->removeChannel(channel);}
4.定時(shí)器的組織方式(和 muduo 差不多,他用的是set,我用的是 multimap)
muduo定時(shí)器容器封裝了 Timer.h里面保存的是超時(shí)時(shí)間和回調(diào)函數(shù), TimerQueue.h使用set容器保存多個(gè)定時(shí)器, 然后在TimerQueue中使用timerfd_create創(chuàng)建一個(gè)timerfd句柄, 插入定時(shí)器A后先比較A的觸發(fā)時(shí)間和TimerQueue的觸發(fā)時(shí)間, 如果A的觸發(fā)時(shí)間比其小就使用timerfd_settime重置TimerQueue的timerfd的觸發(fā)時(shí)間, TimerQueue中的timerfd的觸發(fā)時(shí)間永遠(yuǎn)與保存的定時(shí)器中觸發(fā)時(shí)間最小的那個(gè)相同, 然后timerfd觸發(fā)可讀后, 遍歷保存的多個(gè)定時(shí)器, 看看有沒有同時(shí)到期的, 有執(zhí)行回調(diào)函數(shù)
4.協(xié)程庫中定時(shí)器的使用(與 libco 基本一樣)
先行閱讀:https://blog.csdn.net/liushengxi_root/article/details/88421955 主要函數(shù)(addEpoll):
void Channel::addEpoll(){//這里就設(shè)置的回調(diào)函數(shù)和 timerfd 設(shè)置的回調(diào)函數(shù)不一樣哦 setHandleCallback(std::bind(&Channel::handleFun, this)); events_ |= kReadEvent; events_ |= kWriteEvent; update(); Timer *tmp = loop_->runAfter(10); //退出當(dāng)前協(xié)程 get_curr_routine()->Yield(); //刪除加入的 epoll 信息和對(duì)應(yīng)定時(shí)器 loop_->removeChannel(this); loop_->cancel(tmp);}
事件到來會(huì)喚醒對(duì)應(yīng)的協(xié)程,時(shí)間超時(shí)時(shí) 也會(huì)喚醒對(duì)應(yīng)的協(xié)程(不會(huì)讓其一直阻塞下去)
主事件循環(huán)還是看上面的鏈接即可!!
運(yùn)行結(jié)果:
標(biāo)簽:
相關(guān)推薦:
精彩放送:
- []【當(dāng)前獨(dú)家】什么是執(zhí)行力?執(zhí)行力詳情介紹
- []環(huán)球快看點(diǎn)丨java編程題:如何判斷四個(gè)棋子連在一起?
- []何刪除定時(shí)器?MyLibco協(xié)程網(wǎng)絡(luò)庫定時(shí)器的設(shè)計(jì)
- []資訊:北京:2023年計(jì)劃,啟動(dòng)危舊樓房改建和簡易樓騰退20萬平方米
- []環(huán)球快播:免費(fèi)下載國外視頻的網(wǎng)站 你值得擁有
- []【聚看點(diǎn)】華容道有哪些通關(guān)技巧?15數(shù)字華容道解法
- []泥巴潭:《新龍族》免費(fèi)卷土重來 拒絕“菜鳥玩家”
- []世界觀速訊丨速讀2023年北京市政府工作報(bào)告 | 2023年北京將籌建保障性租賃住房8萬套,竣工各類保障性住房9萬套
- []每日熱訊!瀘州老窖:公司銷售工作按計(jì)劃順利推進(jìn)
- []北京:過去5年,建設(shè)籌集各類政策性住房54萬套
- []環(huán)球看點(diǎn)!貴州石阡 中國最古老溫泉的旅游熱度如何繼續(xù)升溫?|新春里的中國經(jīng)濟(jì)
- []今亮點(diǎn)!* 中創(chuàng)新航遭摩根大通減持超5%,持股比例降至1.78%
- []【焦點(diǎn)熱聞】海南瑞澤:截至2023年1月20日,公司股東人數(shù)為66,155
- []【BT金融分析師】比亞迪電動(dòng)車市場份額持續(xù)擴(kuò)大,分析師稱其增長超過特斯拉
- []全球視訊!白求恩大夫是哪國人?諾爾曼·白求恩資料介紹
- []全球熱消息:貨郎是什么意思?現(xiàn)在的貨郎指的是什么?
- []孤城閉帝后結(jié)局怎么樣?孤城閉劇情介紹
- []【世界聚看點(diǎn)】蘋果手機(jī)怎么打開微信深色模式?蘋果手機(jī)打開微信深色模式的步驟
- []陜西的簡稱是什么?陜西省資料介紹
- []屈原歷史資料介紹?對(duì)屈原的人物評(píng)價(jià)怎么寫?
- []【獨(dú)家】獵狐電視劇胡軍演誰?獵狐劇情介紹
- []【獨(dú)家】愚人節(jié)怎么發(fā)朋友圈?愚人節(jié)適合發(fā)朋友圈的搞笑說說有哪些?
- []全球觀點(diǎn):華為手機(jī)nfc是什么意思?近場通信的技術(shù)原理是什么?
- []每日熱點(diǎn):去哪兒2023春節(jié)報(bào)告:平均每個(gè)旅客多走400公里,出境機(jī)票同比增長6.7倍
- []天天日?qǐng)?bào)丨這個(gè)春節(jié),旅游人信心又來了
- []世界最資訊丨春運(yùn)返程迎來客流高峰,有人坐綠皮火車返崗開工
- []“零下53度”的東北游,能火多久?
- []簡訊:租賃模式的住宿業(yè):合作、匹配、把控
- []全球今頭條!我,過年不回家,“和9個(gè)陌生人去旅游”
- []【速看料】地產(chǎn)律師的一年| 飛了10多個(gè)城市,為購房者追回千萬損失
- []天天熱推薦:地產(chǎn)營銷人的一年| 要時(shí)刻保證自己不被淘汰,“還沒想過離開房地產(chǎn)行業(yè)”
- []今日熱門!致遠(yuǎn)新能:截止2023年1月20日股東人數(shù)為11966人
- []熱資訊!物業(yè)人的一年| 經(jīng)歷了疫情和高溫考驗(yàn),“我們圓滿完成年度KPI考核”
- []產(chǎn)業(yè)策劃人的一年| 產(chǎn)業(yè)板塊被集團(tuán)地產(chǎn)業(yè)務(wù)拖累,“相信今年會(huì)比去年好”
- []豪宅中介的一年| 在單價(jià)屢破30萬元/平的區(qū)域賣房是一種什么體驗(yàn)?
- []藍(lán)盾光電:公司將嚴(yán)格按照信息披露的相關(guān)規(guī)定,及時(shí)履行信息披露義務(wù)
- []環(huán)球快訊:132億!寧德時(shí)代工廠投產(chǎn)!
- []【環(huán)球新視野】防城港各大景區(qū)人氣爆棚
- []全球今日?qǐng)?bào)丨國泰君安證券:美國經(jīng)濟(jì)外強(qiáng)中干 核心GDP繼續(xù)回落
- []【環(huán)球新視野】馬亮:扎堆式旅游何時(shí)休?游客要理性,景區(qū)更應(yīng)強(qiáng)化能力建設(shè)
- []總投資53億元!20萬噸負(fù)極材料項(xiàng)目落地
- []世界實(shí)時(shí):【首席展望】海通證券余文心:醫(yī)藥板塊有望反轉(zhuǎn) 看好三條主線
- []244億!特斯拉又投兩工廠
- []焦點(diǎn)快看:白酒“霸屏”春節(jié)假期 開門紅迎新增長周期 今年收益或超額
- []環(huán)球觀焦點(diǎn):寧德時(shí)代牽頭!斥資67億元 開發(fā)玻利維亞鋰資源
- []全球熱文:中海董事長顏建國拜會(huì)香港特首李家超 積極參與北部都會(huì)區(qū)和明日大嶼建設(shè)
- []渣打預(yù)測(cè)布油有望反彈至90美元以上,但對(duì)突破100美元并不樂觀!
- []每日視訊:現(xiàn)貨黃金交易策略:金價(jià)見頂風(fēng)險(xiǎn)增加,關(guān)注美國PCE數(shù)據(jù)
- []文化和旅游部:春節(jié)假期國內(nèi)旅游出游3.08億人次 同比增長23.1%
- []快訊:香港財(cái)政司司長:未有定案是否再派消費(fèi)券 樓市現(xiàn)時(shí)有秩序調(diào)整
- []美國12月新屋銷售量連續(xù)第三個(gè)月上升 同比仍降26.6%
- []天天觀焦點(diǎn):CFTC商品持倉解讀:投機(jī)者提高美國原油凈多頭頭寸
- []新春走基層丨保障多地軌道交通正常運(yùn)行,眾合科技員工誓要站好春節(jié)最后一班崗
- []廣西出臺(tái)16條措施 加快文化旅游業(yè)全面恢復(fù)振興
- []環(huán)球即時(shí):1月28日財(cái)經(jīng)早餐:黃金連續(xù)第六周周線上漲,焦點(diǎn)轉(zhuǎn)向美聯(lián)儲(chǔ)
- []速讀:美原油交易策略:美國GDP數(shù)據(jù)緩解需求擔(dān)憂,油價(jià)將重拾漲勢(shì)?
- []熱門:美股異動(dòng) | 移動(dòng)金融智選平臺(tái)簡普科技(JT.US)漲超9% 年初至今累漲超31%
- []環(huán)球快播:美股異動(dòng) | 途牛(TOUR.US)漲超9.5% 年初至今累漲近67%
- []最新資訊:威海廣泰:公司以技術(shù)創(chuàng)新為龍頭,始終重視消防救援裝備的技術(shù)研發(fā)工作,每年都有10余型新產(chǎn)品完成開發(fā)
- []環(huán)球即時(shí):奧維通信:具體內(nèi)容請(qǐng)?jiān)斠姽居?023年1月20日披露的《關(guān)于終止籌劃重大資產(chǎn)重組的公告》
- []新春行業(yè)動(dòng)態(tài)合集 | 日媒:春節(jié)中國旅客訪日需求依舊低迷;國航回應(yīng)“一航班顛簸下墜”
- []當(dāng)前快報(bào):查詢車輛保險(xiǎn)怎么查詢
- []全球快消息!手工鑰匙扣制作圖片_手工鑰匙扣制作過程
- []【世界報(bào)資訊】文化和旅游部:今年春節(jié)國內(nèi)出游人次恢復(fù)至疫前同期88.6%
- []旅游強(qiáng)勁復(fù)蘇:多地游客數(shù)追平2019年,部分已反超
- []近3.08億人次出游,收入3758.43億元, 春節(jié)假期各OTA數(shù)據(jù)戰(zhàn)報(bào)PK
- []世界快看點(diǎn)丨上萬只基金產(chǎn)品 2000余位基金經(jīng)理 兔年養(yǎng)基如何選?
- []攜程2023春節(jié)旅游報(bào)告:旅游訂單同比增長超4倍,其中出境游增長640%
- []狀態(tài)火熱!歐文三分球4中3半場獨(dú)砍18分
- []鈉電池元年將至 產(chǎn)業(yè)化到哪一步了?
- []快播:特斯拉殺瘋了 價(jià)格還能降?美國重磅數(shù)據(jù)公布 傳遞什么信號(hào)?
- []當(dāng)前動(dòng)態(tài):報(bào)價(jià)上漲12%,西藏山南光伏增配儲(chǔ)能EPC中標(biāo)公示發(fā)布
- []峰谷電價(jià)差擴(kuò)大,低價(jià)谷電儲(chǔ)熱采暖優(yōu)勢(shì)明顯
- []快訊:寶馬計(jì)劃量產(chǎn)全固態(tài)電池,最快2025年實(shí)現(xiàn)裝車
- []今日視點(diǎn):重磅發(fā)聲!兔年怎么投?多家公募巨頭最新研判
- []環(huán)球百事通!機(jī)構(gòu)展望2023:中國市場更具吸引力 多元化投資組合提供機(jī)會(huì)
- []天天熱點(diǎn)評(píng)!盤點(diǎn)︱2023年即將上市IPO光伏公司統(tǒng)計(jì)表
- []立冬的優(yōu)美詩詞句子_立冬的優(yōu)美詩詞
- []【世界聚看點(diǎn)】平安福7000交了5年能退多少,保單現(xiàn)金價(jià)值
- []世界速遞!被銀行忽悠買了保險(xiǎn)可以退嗎,可以退
- []熱點(diǎn)聚焦:公積金能不能每月還商貸,當(dāng)然可以
- []全球微動(dòng)態(tài)丨最低-1℃郴州未來幾天將迎霜凍天氣
- []【環(huán)球速看料】兔年港股開門紅!恒生指數(shù)漲逾2% 科技指數(shù)大漲超4%!多板塊集體爆發(fā)
- []擴(kuò)張性財(cái)政政策包括哪些(擴(kuò)張性貨幣政策包括哪些)
- []天天簡訊:為什么美金匯率一直在跌(最近美元匯率為什么一直在跌 最近美元匯率為啥一直在)
- []解析基金“專業(yè)買手”!FOF基金經(jīng)理為何喜歡低換手?還有哪些特征?
- []農(nóng)村信用社貸款無力償還怎么辦理(農(nóng)村信用社貸款10萬還不上怎么辦)
- []基金gp和lp的區(qū)別優(yōu)先和劣后(基金gp和lp的區(qū)別優(yōu)先和劣后)
- []發(fā)力定制化場景金融布局 錢小樂探索精準(zhǔn)營銷新模式
- []最低或8萬/噸!硅料價(jià)格拐點(diǎn)何時(shí)來臨?
- []當(dāng)前信息:微信轉(zhuǎn)賬退回對(duì)方會(huì)收到提示嗎?(別人微信轉(zhuǎn)賬給我我退回有記錄嗎)
- []宏觀經(jīng)濟(jì)分析包括哪些內(nèi)容(宏觀經(jīng)濟(jì)分析包括哪些內(nèi)容)
- []今日聚焦!工商寶貝成長卡好不好(工行寶貝成長卡有什么弊端)
- []農(nóng)業(yè)銀行怎么查詢凍結(jié)原因(怎樣判斷是永久凍結(jié)還是臨時(shí)凍結(jié))
- []全球今亮點(diǎn)!公積金4萬可貸款多少(公積金賬戶4w可以貸款多少)
- []全球今亮點(diǎn)!地方債誰在買(地方專項(xiàng)債誰來買單)
- []天天熱訊:京郊民宿老板:過完最冷清的春節(jié),盼春暖花開不愁客人
- []焦點(diǎn)快報(bào)!攜程:兔年春節(jié)過半,香港、澳門領(lǐng)跑春節(jié)出境熱門目的地
- []天天最資訊丨春節(jié)樓市不打烊,部分樓盤推“0月供”計(jì)劃,有客戶打飛的到佛山買房
- []日元計(jì)價(jià)的黃金周三創(chuàng)新高,美元計(jì)價(jià)的或?qū)⒕o隨其后!
- 軟件開發(fā)中的“OO”到底是什么?真實(shí)案例解析OO理論與實(shí)踐
- 當(dāng)前熱議!【記錄分享】Android常用應(yīng)用市場和應(yīng)用包名工作
- 全球新消息丨為什么新擬態(tài)UI和可訪問性是無法共存的?原因分析
- 數(shù)學(xué)思想方法猜想與反駁 反例反駁在學(xué)習(xí)中的用處
- 焦點(diǎn)!配置完Kafka集群后 通過JavaAPI方式來操作
- 東東助手顯示無法連接服務(wù)器怎么辦?模擬器常見問題及解決辦法
- 壓鑄模的使用特點(diǎn)是什么?壓鑄模的使用特點(diǎn)及使用原則
- 【體驗(yàn)】Xoom評(píng)測(cè):比iPad重50克 屏幕倒更大?
- 環(huán)球即時(shí)看!QQ郵箱發(fā)郵件受限制怎么辦?SMTP發(fā)送郵件限制的解決方案
- 熱門看點(diǎn):推薦21個(gè)高質(zhì)量圖片網(wǎng)站 免費(fèi)免版權(quán)值得收藏
- B站注冊(cè)資本增幅400%至5億 目前由陳睿全資持股
- 光源資本出任獨(dú)家財(cái)務(wù)顧問 沐曦集成電路10億元A輪融資宣告完成
- 巨輪智能2021年上半年?duì)I收11.24億元 期內(nèi)研發(fā)費(fèi)用投入增長19.05%
- 紅棗期貨尾盤拉升大漲近6% 目前紅棗市場總庫存約30萬噸
- 嘉銀金科發(fā)布2021年Q2財(cái)報(bào) 期內(nèi)凈利潤達(dá)1.27億元同比增長208%
- 成都銀行2021上半年凈利33.89億元 期內(nèi)實(shí)現(xiàn)營收同比增長17.27億元
- 汽車之家發(fā)布2021年第二季度業(yè)績 期內(nèi)新能源汽車品牌收入增長238%
- 中信銀行上半年實(shí)現(xiàn)凈利潤290.31億元 期末不良貸款余額706.82億元
- 光伏概念掀起漲停潮交易價(jià)格創(chuàng)新高 全天成交額達(dá)1.29億元
- 上半年生物藥大增45% 關(guān)鍵財(cái)務(wù)指標(biāo)好轉(zhuǎn)營收賬款持續(xù)下降
- 【全球新視野】中信證券交易手續(xù)費(fèi)是多少(中信交易手續(xù)費(fèi))
- 環(huán)球觀熱點(diǎn):明星稅收怎么收費(fèi)比例(明星的收入稅率是多少)
- 杜邦獎(jiǎng)學(xué)金_關(guān)于杜邦獎(jiǎng)學(xué)金簡述
- 熱訊:港元1個(gè)月拆息四連跌 報(bào)2.94345
- 世界今熱點(diǎn):宣發(fā)“重大失誤”!鄧超新片緊急撤檔,上映首日票房、上座率倒數(shù)第一;春節(jié)檔票房已超50億
- 環(huán)球微資訊!多家光伏逆變器上市公司2022年業(yè)績預(yù)喜 儲(chǔ)能正成為重要增長點(diǎn)
- 年終:2022跨界儲(chǔ)能企業(yè)一覽表
- 頭條焦點(diǎn):投資600億!比亞迪合作伙伴造電池!
- 山東和山西為何成為儲(chǔ)能引領(lǐng)者
- 消息!碳酸鋰漲價(jià)?再度直逼50萬大關(guān)!
- 資訊:港交所兔年首個(gè)交易日 財(cái)政司司長陳茂波冀股市吐氣揚(yáng)眉
- 專題回顧 | 房地產(chǎn)企業(yè)并購融資現(xiàn)狀解析
- 報(bào)告:今年房企主要“保交付”,銷售和投資規(guī)模呈前低后高走勢(shì)
- 天天熱資訊!紅星美凱龍:行使換股權(quán)后 阿里巴巴持有公司權(quán)益已達(dá)到9.99%
- 盤后機(jī)構(gòu)策略:市場維持強(qiáng)勢(shì)格局 關(guān)注春節(jié)后內(nèi)資流入情況
- 以嶺藥業(yè):奮力推進(jìn)新時(shí)代中醫(yī)藥傳承創(chuàng)新發(fā)展
- 當(dāng)前要聞:五礦地產(chǎn)(00230)首季度合約銷售額30.7億元 同比下跌30.7%
- 熱訊:已簽收的電子匯票在哪里查詢 在哪里查詢已簽收的電子(已簽收的電子匯票在哪里查詢 在哪里查詢已簽收的電子)
- 當(dāng)前報(bào)道:股票分紅在什么時(shí)間(股票分紅多長時(shí)間到賬)
- 覆銅板是什么東西及用途(覆銅板是什么東西及用途)
- 環(huán)球視訊!全部資本化比率公式(全部資本化比率公式)
- 小規(guī)模納稅人收到專票的風(fēng)險(xiǎn)(小規(guī)模收到13%的專票有風(fēng)險(xiǎn)沒)
- 【天天速看料】按單利計(jì)算是什么意思 什么是按單利計(jì)算(按單利計(jì)算是什么意思 什么是按單利計(jì)算)
- 熱點(diǎn)聚焦:利潤率的公式怎么算的(利潤和利潤率的計(jì)算公式)
- 世界今頭條!春節(jié)假期海南離島免稅購物“南北兩旺”
- 當(dāng)前要聞:什么叫收現(xiàn)比(收現(xiàn)比是什么意思)
- 熱資訊!稅金貸款有什么銀行做(什么銀行有稅金貸)
- 速看:集中趨勢(shì)指標(biāo)包括哪些方面(集中趨勢(shì)指標(biāo)包括哪些方面)
- 天天播報(bào):大學(xué)生可以開佳物分期嗎(佳物分期大學(xué)生能用嗎 大學(xué)生可不可以用佳物分期)
- 央行100億逆回購是什么意思(央行100億逆回購意味著什么)
- 環(huán)球速讀:大年初四,怎么做能接好運(yùn)?
- 新資訊:貨幣資金包括哪三項(xiàng)(貨幣資金包括哪三個(gè)部分)
- 當(dāng)前播報(bào):強(qiáng)贖觸發(fā)價(jià)什么意思?(強(qiáng)贖觸發(fā)價(jià)什么意思科普)
- 當(dāng)前資訊!銀行卡信息不完善是怎么回事(銀行提示此卡狀態(tài)異常)
- 無卡是否可以存款(不帶卡可以存款嗎)
- 全球播報(bào):轉(zhuǎn)賬二十四小時(shí)沒到賬怎么辦(跨行轉(zhuǎn)賬4天了還沒到賬)
- 【環(huán)球時(shí)快訊】紅字沖銷什么意思(紅字沖銷什么意思)
- 2022年房貸利率是降還是升(銀行利率表2022最新住房貸款利率,房貸利率每年都會(huì)變嗎)
- 【速看料】林木不動(dòng)產(chǎn)權(quán)證可以貸款嗎(沒有林權(quán)證可以去銀行貸款嗎)
- 環(huán)球時(shí)訊:廣發(fā)為什么叫廢行(存錢要小心五家銀行)
- 天天觀點(diǎn):監(jiān)管賬戶什么意思(監(jiān)管賬戶怎么查)
- 世界簡訊:來分期上征信嗎2021年(來分期上征信嗎2022年,上征信)
- 公積金余額只有幾千塊可以貸款啊(公積金只有幾千塊可以貸款嗎 公積金余額只有幾千塊能貸款嗎)
- 全球今頭條!去銀行打征信報(bào)告需要帶什么資料(去銀行辦個(gè)人征信需準(zhǔn)備什么材料)
- 全球速讀:怎么在app申請(qǐng)房產(chǎn)退稅(怎么在app里辦理房貸退稅)
- 瑞信:維持PACCAR(PCAR.US)中性評(píng)級(jí)
- 全球快消息!金融中bps是什么意思(bps金融專業(yè)術(shù)語)
- 分付微信怎么開通 微信分付如何開通(分付微信怎么開通 微信分付如何開通)
- 火車退票手續(xù)費(fèi) 火車票退票的手續(xù)費(fèi)(火車票退票要手續(xù)費(fèi)嗎)
- 建設(shè)銀行如何提高每日轉(zhuǎn)賬額度(建設(shè)銀行怎么提高每日轉(zhuǎn)賬額度 建設(shè)銀行轉(zhuǎn)賬額度怎么提升)
- 環(huán)球熱消息:炒股票新手入門基礎(chǔ)知識(shí)(炒股入門基礎(chǔ)知識(shí) 新手炒股基礎(chǔ)知識(shí))
- 每日動(dòng)態(tài)!如何查詢自己的征信情況(如何查自己的征信記錄是否有貸款)
- 快播:NYMEX原油下看79.03美元
- 支付密碼忘了怎么辦(手機(jī)支付密碼忘記怎么辦)
- 當(dāng)前快看:臺(tái)灣用的貨幣是什么幣(臺(tái)灣錢幣叫什么名字)
- 國際金價(jià)短線或下測(cè)1920美元
- 延期到賬怎么關(guān)閉(微信延時(shí)到賬怎么解除)
- 焦點(diǎn)日?qǐng)?bào):舉牌是什么意思?(什么是舉牌)
- 每日時(shí)訊!mtn是什么幣(mtn是什么幣)
- 2021年車險(xiǎn)優(yōu)惠政策(車險(xiǎn)優(yōu)惠政策2021 2021車險(xiǎn)優(yōu)惠)
- 春節(jié)假期過半,昆明民宿預(yù)訂量同比增長731%
- 天天訊息:中國銀行被凍結(jié)只能進(jìn)不能出(中國銀行只進(jìn)不出凍結(jié)幾天)
- 公積金可以更改銀行卡嗎(省公積金可以轉(zhuǎn)市公積金嗎)
- 頭條焦點(diǎn):車沒買交強(qiáng)險(xiǎn)上路會(huì)怎么樣(車輛不購買交強(qiáng)險(xiǎn)會(huì)怎樣)
- 世界球精選!LG與韓華聯(lián)手布局美國儲(chǔ)能市場
- 天天快看點(diǎn)丨2023年開始,電價(jià)大改?取消階梯電價(jià)?以后電費(fèi)怎么交
- 世界今頭條!電力體現(xiàn)時(shí)空價(jià)值,2023年能源監(jiān)管工作之儲(chǔ)能看點(diǎn)
- 剛辦的信用卡還款日賬單日怎么算(如何計(jì)算信用卡還款日和出賬日)
- 全球簡訊:200MW/400MWh,寧夏能發(fā)新能源寧東儲(chǔ)能示范項(xiàng)目EPC招標(biāo)
- 當(dāng)前頭條:黃金交易提醒:市場目光轉(zhuǎn)向美國GDP數(shù)據(jù),金價(jià)仍有上行機(jī)會(huì)
- 環(huán)球百事通!現(xiàn)貨黃金交易策略:美國GDP數(shù)據(jù)前部分多頭獲利了結(jié),金價(jià)短線回調(diào)
- 全球播報(bào):美原油交易策略:經(jīng)濟(jì)衰退擔(dān)憂回升,油價(jià)短線下行風(fēng)險(xiǎn)增加
- 環(huán)球視點(diǎn)!以嶺藥業(yè)創(chuàng)新專利中藥惠及海內(nèi)外
- 金價(jià)創(chuàng)十年來最佳開年表現(xiàn),接近技術(shù)牛市
- 天天時(shí)訊:巴克萊預(yù)測(cè)英銀2月決議鷹派,建議提前拋售歐元兌英鎊!
- 世界快消息!啟程2023丨房地產(chǎn)行業(yè)如何面對(duì)新的一年?圈里圈外許下新年愿景
- 天天百事通!安本股票部研究與投資流程主管安德魯·米林頓:股市有溫和上行潛力,2023年可能是“優(yōu)質(zhì)股”之年
- 環(huán)球觀察:中國動(dòng)力電池產(chǎn)能占全球的比例有多大?
- 一美元等于幾元 一美元是多少人民幣(一美元等于幾元 一美元是多少人民幣)
- 網(wǎng)商貸怎么借錢 網(wǎng)商貸如何借錢(網(wǎng)商貸借錢操作流程)
- 熱訊:2021上海gdp總量(全國gdp排名2021最新排名,上海市g(shù)dp超4萬億)
- 資訊:什么是匯率? 什么叫匯率(什么是匯率? 什么叫匯率)
- 特隆美儲(chǔ)能20MW/100MWh阿里中廣核儲(chǔ)能電站項(xiàng)目成功并網(wǎng)
- 龍頭增速超40倍!全球儲(chǔ)能鋰電池出貨量再創(chuàng)新高
- 發(fā)揮智能路由功能 錢小樂助力金融端與流量端精準(zhǔn)對(duì)接
- erc20是什么幣(erc是什么幣)
- 全球快資訊丨等額本息 30年提前還款技巧(等額本金20年第幾年提前還款合適)
- 銀行反饋此卡不可用怎么解決(銀行卡反饋此卡不可用怎么辦 銀行反饋此卡不可用是怎么回事)
- 支付寶手續(xù)費(fèi) 支付寶的手續(xù)費(fèi)要多少(支付寶手續(xù)費(fèi) 支付寶的手續(xù)費(fèi)要多少)
- 短訊!95511怎么轉(zhuǎn)人工(95511怎么轉(zhuǎn)人工服務(wù))
- 熱點(diǎn)評(píng)!集合競價(jià)掛單撤單規(guī)則,有以下3項(xiàng)(集合競價(jià)掛單撤單規(guī)則,有以下3項(xiàng))
- 世界熱頭條丨辦信用卡被拒了多久才能再申請(qǐng)(信用卡被拒多久可以重新申請(qǐng) 信用卡被拒什么時(shí)候可以)
- 天天最資訊丨基金轉(zhuǎn)換是按當(dāng)天的凈值買入嗎(基金轉(zhuǎn)換是按當(dāng)天的凈值買入嗎)
- 天天消息!2020年成都查征信網(wǎng)點(diǎn)地址(成都自動(dòng)查詢征信網(wǎng)點(diǎn))
- 當(dāng)前信息:股票復(fù)權(quán)有什么影響?(股票里后復(fù)權(quán)是什么意思)
- 新春佳節(jié)際 年味至濃時(shí) 看湖南市場監(jiān)管人忙碌的身影......
- 【天天熱聞】公募密集調(diào)倉 重點(diǎn)加倉五大板塊!今年基金投資思路在這里
- 【天天新要聞】法幣怎么換成人民幣(法幣怎么換成人民幣)
- 視訊!在途余額是什么意思(在途余額是什么意思啊)
- 醫(yī)療保險(xiǎn)怎么報(bào)銷,分以下三步計(jì)算(農(nóng)村合作醫(yī)療怎樣報(bào)銷)