⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtmoviewintimer.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
字号:
/* * Copyright (C) 2006, 2007 Apple Computer, Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */#include "config.h"#include <windows.h>#include "QTMovieWinTimer.h"#include <wtf/Assertions.h>// This file is used by the QuickTime access DLL. It copies some WebCore code // which can't be used directly due to dependency issues.// FIXME: Find a way to do timers that can manage <10ms resolution properly too.static UINT_PTR timerID;static void (*sharedTimerFiredFunction)();static HINSTANCE instanceHandle = 0;static HWND timerWindowHandle = 0;static UINT timerFiredMessage = 0;static const LPCWSTR kTimerWindowClassName = L"TimerWindowClass";static bool processingCustomTimerMessage = false;static LRESULT CALLBACK TimerWindowWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){    if (message == timerFiredMessage) {        processingCustomTimerMessage = true;        sharedTimerFiredFunction();        processingCustomTimerMessage = false;    } else        return DefWindowProc(hWnd, message, wParam, lParam);    return 0;}static void initializeOffScreenTimerWindow(){    if (timerWindowHandle)        return;        WNDCLASSEX wcex;    memset(&wcex, 0, sizeof(WNDCLASSEX));    wcex.cbSize = sizeof(WNDCLASSEX);    wcex.lpfnWndProc    = TimerWindowWndProc;    wcex.hInstance      = instanceHandle;    wcex.lpszClassName  = kTimerWindowClassName;    RegisterClassEx(&wcex);    timerWindowHandle = CreateWindow(kTimerWindowClassName, 0, 0,       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, HWND_MESSAGE, 0, instanceHandle, 0);    timerFiredMessage = RegisterWindowMessage(L"com.apple.WebKit.TimerFired");}void setSharedTimerFiredFunction(void (*f)()){    sharedTimerFiredFunction = f;}static void CALLBACK timerFired(HWND, UINT, UINT_PTR, DWORD){    sharedTimerFiredFunction();}void setSharedTimerFireDelay(double interval){    ASSERT(sharedTimerFiredFunction);    unsigned intervalInMS;    if (interval < 0)        intervalInMS = 0;    else {        interval *= 1000;        if (interval > USER_TIMER_MAXIMUM)            intervalInMS = USER_TIMER_MAXIMUM;        else            intervalInMS = (unsigned)interval;    }    if (timerID) {        KillTimer(0, timerID);        timerID = 0;    }    // We don't allow nested PostMessages, since the custom messages will effectively starve    // painting and user input. (Win32 has a tri-level queue with application messages >     // user input > WM_PAINT/WM_TIMER.)    // In addition, if the queue contains input events that have been there since the last call to    // GetQueueStatus, PeekMessage or GetMessage we favor timers.    if (intervalInMS < USER_TIMER_MINIMUM && processingCustomTimerMessage &&        !LOWORD(::GetQueueStatus(QS_ALLINPUT))) {        // Windows SetTimer does not allow timeouts smaller than 10ms (USER_TIMER_MINIMUM)        initializeOffScreenTimerWindow();        PostMessage(timerWindowHandle, timerFiredMessage, 0, 0);    } else        timerID = SetTimer(0, 0, intervalInMS, timerFired);}void stopSharedTimer(){    if (timerID) {        KillTimer(0, timerID);        timerID = 0;    }}void setSharedTimerInstanceHandle(HINSTANCE handle){    instanceHandle = handle;}double systemTime(){    FILETIME ft;    GetSystemTimeAsFileTime(&ft);    ULARGE_INTEGER t;    memcpy(&t, &ft, sizeof(t));    return t.QuadPart * 0.0000001 - 11644473600.0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -