C 自動喚醒執行緒

2021-04-17 05:34:28 字數 1522 閱讀 9947

在通常的程式設計中,我們時常會不斷地啟動新執行緒來完成不斷出現的新任務.而由於任務的大小不確定性,以及出現要處理的任務的時間的不確定性,使得我們的好多程式總是在不斷地在開啟執行緒,並完成某任務後就退出執行緒.當每次任務不大,可又總是有任務頻繁出現時,總是不斷地開啟並退出執行緒.這開啟並退出執行緒所消耗的系統資源與用執行緒機制所帶來的收效是不合理的,而且通常我們的任務一般也正如上所述,通常不大,而且時不時會有出現要處理.這時我們就需要乙個能自動喚醒的執行緒來處理我們的這些小而多又很雜的任務.現分享一c++實現的原始碼與大家交流學習.

// thread.h

#ifndef __thread_h_

#define __thread_h_

#include

#include

#include

#include

#pragma once

#define stop_working -1

#define keep_working  0

#define run_eorking   1

class cthtarget 

virtual ~cthtarget()

bool autodelete()

void setautodelete(bool autodeleteflag = true)

void setdata(int ndata)

virtual void run()

private:

bool m_autodeleteflag;

int  m_ndata;};

class cthread

virtual ~cthread()

deletecriticalsection(&m_csthread);

}static unsigned __stdcall threadfunction(void* pparam)

pthread->m_flag = keep_working;

printf("suspendthread./n");

suspendthread(pthread->m_hthread); 

}return 0;

}void settarget(cthtarget *ptarget)

cthtarget* gettarget(void)

bool isfree()

else}

void stop()

private:

int     m_flag;    // 執行緒狀態

typedef std::listtargetlist;

typedef targetlist::iterator targetlistiter;

targetlist   m_tltask;    // 任務列表

unsigned   m_unthreadid;   // 執行緒id

critical_section m_csthread;   // 臨界區對像

handle    m_hthread;    // 執行緒控制代碼};

#endif

執行緒喚醒機制

object類中提供了三個方法 wait 等待 notify 喚醒單個執行緒 notifyall 喚醒所有執行緒 public class student public class setthread implements runnable override public void run catc...

C 執行緒的建立,掛起,喚醒,終止

例子 執行緒 dword stdcall threadproc lpvoid lpparameter return 0 建立 執行緒 void cmultithreaddlg onbtcreate 掛起執行緒 void cmultithreaddlg onbtsuspend 喚醒執行緒 void c...

執行緒等待與喚醒

標籤 多執行緒 所有的等待和喚醒執行緒,都是針對某個具體物件例項的.api介面 說明wait 讓當前執行緒進入等待 阻塞 狀態,直到其他執行緒呼叫此物件的notify 或notifyall 來喚醒,之後該執行緒進入就緒狀態.wait long timeout 讓當前執行緒進入阻塞狀態,直到其他執行緒...