各位高手,請問 ISAPI FILTER 中 可否加上定時器 請問 ISAPI FILTER 中 可否加上定時器,及如何加上使用(MFC C++)請各位高手幫忙多謝 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 完全可以:m_iTimerID=SetTimer(NULL,1,60*60*1000,TimerProc); 謝謝您的回覆,但接收的函式如何編寫 onTimer因為都會出現WPS.cpp(68): error C2664: 'SetTimer' : 無法將參數 4 從 'void (UINT)' 轉換成 'TIMERPROC'範圍中沒有符合目標類型的函式 (使用此名稱)多謝各位高手 定义一个全局的定时器事件处理函数样子就是这样的:VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime){ //做你想做的事情 //个参数的含义参考MSDN //Filter的全局变量(theFilter)是可以方便引用的 ....} 謝謝高手回覆但目前測試定時器並沒有作用不知那裡寫錯,請您告知多謝了...編碼如下:int View_N;int m_iTimerID;VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { char szSize[10];View_N=View_N+1;itoa(View_N,szSize,10);CWPSFilter::WriteLog(szSize,"1","2","3","up_VariableName","agent_VariableName","TEST","aa","22");}// 僅有的一個 CWinApp 物件// 注意: 如果您將專案變更為在 DLL 中不再使用 MFC,您可以移除這個物件。CWinApp theApp;// 僅有的一個 CWPSFilter 物件CWPSFilter theFilter;// CWPSFilter 實作CWPSFilter::CWPSFilter(){}CWPSFilter::~CWPSFilter(){}BOOL CWPSFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer){ // 呼叫初始設定的預設實作 CHttpFilter::GetFilterVersion(pVer); // 清除由基底類別設定的旗標 pVer->dwFlags &= ~SF_NOTIFY_ORDER_MASK; // 設定我們想要的旗標 pVer->dwFlags |= SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_URL_MAP | SF_NOTIFY_SEND_RAW_DATA | SF_NOTIFY_END_OF_NET_SESSION; // 設定優先權 pVer->dwFlags |= SF_NOTIFY_ORDER_HIGH; // 載入描述字串 TCHAR sz[SF_MAX_FILTER_DESC_LEN+1]; ISAPIVERIFY(::LoadString(AfxGetResourceHandle(), IDS_FILTER, sz, SF_MAX_FILTER_DESC_LEN)); _tcscpy(pVer->lpszFilterDesc, sz);m_iTimerID=SetTimer(NULL,1,3000,TimerProc); return true;} 定时器的启动应该没有问题检查一下静态函数WriteLog是否正常,包括目录的写访问控制是否对SYSTEM开放 非常感謝高手您的回覆 但目前測試測試的結果定時器還是沒有作用 不知那裡寫錯,請您告知 多謝了... int View_N;int m_iTimerID;VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { char szSize[10];View_N=View_N+1;itoa(View_N,szSize,10);CWPSFilter::WriteLog("Step 3",szSize,"2","3","up_VariableName","agent_VariableName","TEST","aa","22");}BOOL CWPSFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer){ // 呼叫初始設定的預設實作 CHttpFilter::GetFilterVersion(pVer); // 清除由基底類別設定的旗標 pVer->dwFlags &= ~SF_NOTIFY_ORDER_MASK; // 設定我們想要的旗標 pVer->dwFlags |= SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_URL_MAP | SF_NOTIFY_SEND_RAW_DATA | SF_NOTIFY_END_OF_NET_SESSION; // 設定優先權 pVer->dwFlags |= SF_NOTIFY_ORDER_HIGH; // 載入描述字串 TCHAR sz[SF_MAX_FILTER_DESC_LEN+1]; ISAPIVERIFY(::LoadString(AfxGetResourceHandle(), IDS_FILTER, sz, SF_MAX_FILTER_DESC_LEN)); _tcscpy(pVer->lpszFilterDesc, sz);char szSize[10];itoa(View_N,szSize,10);CWPSFilter::WriteLog("Step 1",szSize,"2","3","up_VariableName","agent_VariableName","TEST","aa","22");m_iTimerID=SetTimer(NULL,1,3000,TimerProc); return true;}DWORD CWPSFilter::OnUrlMap(CHttpFilterContext* pCtxt,PHTTP_FILTER_URL_MAP pMapInfo){char szSize[10];itoa(View_N,szSize,10);CWPSFilter::WriteLog("Step 2",szSize,"2","3","up_VariableName","agent_VariableName","TEST","aa","22");}MS ACCESS 存入內容如下:log_date ip url Post_str website referer agent status send_type2008/7/7 上午 10:18:56 Step 1 0 2 3 up_VariableName agent_VariableName TEST aa(GetFilterVersion 中存入)2008/7/7 上午 10:18:56 Step 2 0 2 3 up_VariableName agent_VariableName TEST aa(OnUrlMap 中存入)過了3秒後並沒有產生Step 3因此定時器並沒有作用我目前使用IIS7,VS.NET 2003不知那裡疏漏,煩請告知,非常感謝您 補充:IIS7與IIS6測試時都一樣無法存入Step 3 這代表並沒有跑TimerProc()不知那裡疏漏,煩請告知,非常感謝您 我手头没有IIS6和7,在5下是没有问题IIS从6开始对于Filter进行了一系列的控制,部分特性已经不再支持是否还支持定时器中断很难说如果其他地址Step 2...有写入,那就不会是文件访问权限的问题了 非常感謝您的回答我已經試出來了使用多線程配合SleepCWinThread* pWinThread = AfxBeginThread((AFX_THREADPROC)ThreadProc, NULL);便可達到相同效果..多謝 MFC全局变量_afxThreadState的问题 无边框对话框,背景更新问题 在单文档程序中,如何使controlbar停靠在右下? OnWindowPosChanged是啥??请高手解答!!! 丢人呀!VSS VS Visual Source Safe sdk编程中出现多次的LINK错误. ★☆“编程”能算附带劳动吗?(如果你的工作是会计) 如何控制不让CPropertySheet关闭 看看我的学习学习开发经历,对想学开发的人一定会有帮助 最好的开发站点非http://www.codeproject.com莫属!!! 如何在点击edit控件时出现一个对话框? vs2005中的WTL安装
m_iTimerID=SetTimer(NULL,1,60*60*1000,TimerProc);
WPS.cpp(68): error C2664: 'SetTimer' : 無法將參數 4 從 'void (UINT)' 轉換成 'TIMERPROC'
範圍中沒有符合目標類型的函式 (使用此名稱)多謝各位高手
样子就是这样的:VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
//做你想做的事情
//个参数的含义参考MSDN
//Filter的全局变量(theFilter)是可以方便引用的
....
}
但目前測試定時器並沒有作用
不知那裡寫錯,請您告知
多謝了...編碼如下:int View_N;
int m_iTimerID;VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
char szSize[10];
View_N=View_N+1;
itoa(View_N,szSize,10);
CWPSFilter::WriteLog(szSize,"1","2","3","up_VariableName","agent_VariableName","TEST","aa","22");
}// 僅有的一個 CWinApp 物件
// 注意: 如果您將專案變更為在 DLL 中不再使用 MFC,您可以移除這個物件。
CWinApp theApp;
// 僅有的一個 CWPSFilter 物件
CWPSFilter theFilter;
// CWPSFilter 實作
CWPSFilter::CWPSFilter(){}
CWPSFilter::~CWPSFilter(){}BOOL CWPSFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer)
{
// 呼叫初始設定的預設實作
CHttpFilter::GetFilterVersion(pVer); // 清除由基底類別設定的旗標
pVer->dwFlags &= ~SF_NOTIFY_ORDER_MASK; // 設定我們想要的旗標
pVer->dwFlags |= SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_URL_MAP | SF_NOTIFY_SEND_RAW_DATA | SF_NOTIFY_END_OF_NET_SESSION; // 設定優先權
pVer->dwFlags |= SF_NOTIFY_ORDER_HIGH; // 載入描述字串
TCHAR sz[SF_MAX_FILTER_DESC_LEN+1];
ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
IDS_FILTER, sz, SF_MAX_FILTER_DESC_LEN));
_tcscpy(pVer->lpszFilterDesc, sz);m_iTimerID=SetTimer(NULL,1,3000,TimerProc);
return true;
}
检查一下静态函数WriteLog是否正常,包括目录的写访问控制是否对SYSTEM开放
但目前測試測試的結果定時器還是沒有作用
不知那裡寫錯,請您告知
多謝了... int View_N;
int m_iTimerID;VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
char szSize[10];
View_N=View_N+1;
itoa(View_N,szSize,10);
CWPSFilter::WriteLog("Step 3",szSize,"2","3","up_VariableName","agent_VariableName","TEST","aa","22");
}BOOL CWPSFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer)
{
// 呼叫初始設定的預設實作
CHttpFilter::GetFilterVersion(pVer); // 清除由基底類別設定的旗標
pVer->dwFlags &= ~SF_NOTIFY_ORDER_MASK; // 設定我們想要的旗標
pVer->dwFlags |= SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_URL_MAP | SF_NOTIFY_SEND_RAW_DATA | SF_NOTIFY_END_OF_NET_SESSION; // 設定優先權
pVer->dwFlags |= SF_NOTIFY_ORDER_HIGH; // 載入描述字串
TCHAR sz[SF_MAX_FILTER_DESC_LEN+1];
ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
IDS_FILTER, sz, SF_MAX_FILTER_DESC_LEN));
_tcscpy(pVer->lpszFilterDesc, sz);char szSize[10];
itoa(View_N,szSize,10);
CWPSFilter::WriteLog("Step 1",szSize,"2","3","up_VariableName","agent_VariableName","TEST","aa","22");m_iTimerID=SetTimer(NULL,1,3000,TimerProc); return true;
}DWORD CWPSFilter::OnUrlMap(CHttpFilterContext* pCtxt,PHTTP_FILTER_URL_MAP pMapInfo)
{
char szSize[10];
itoa(View_N,szSize,10);
CWPSFilter::WriteLog("Step 2",szSize,"2","3","up_VariableName","agent_VariableName","TEST","aa","22");
}MS ACCESS 存入內容如下:
log_date ip url Post_str website referer agent status send_type
2008/7/7 上午 10:18:56 Step 1 0 2 3 up_VariableName agent_VariableName TEST aa(GetFilterVersion 中存入)
2008/7/7 上午 10:18:56 Step 2 0 2 3 up_VariableName agent_VariableName TEST aa(OnUrlMap 中存入)過了3秒後並沒有產生Step 3因此定時器並沒有作用
我目前使用IIS7,VS.NET 2003不知那裡疏漏,煩請告知,非常感謝您
測試時都一樣無法存入Step 3
這代表並沒有跑TimerProc()不知那裡疏漏,煩請告知,非常感謝您
IIS从6开始对于Filter进行了一系列的控制,部分特性已经不再支持
是否还支持定时器中断很难说如果其他地址Step 2...有写入,那就不会是文件访问权限的问题了
我已經試出來了
使用多線程配合Sleep
CWinThread* pWinThread = AfxBeginThread((AFX_THREADPROC)ThreadProc, NULL);便可達到相同效果..多謝