Exemple #1
0
DWORD WINAPI wf_update_thread(LPVOID lpParam)
{
    int index;
    DWORD fps;
    wfInfo* wfi;
    DWORD beg, end;
    DWORD diff, rate;

    wfi = (wfInfo*) lpParam;

    fps = wfi->framesPerSecond;
    rate = 1000 / fps;

    while (1)
    {
        beg = GetTickCount();

        if (wf_info_lock(wfi) > 0)
        {
            if (wfi->peerCount > 0)
            {
                wf_info_update_changes(wfi);

                if (wf_info_have_updates(wfi))
                {
                    wf_update_encode(wfi);

                    for (index = 0; index < wfi->peerCount; index++)
                        SetEvent(wfi->peers[index]->updateEvent);

                    for (index = 0; index < wfi->peerCount; index++)
                        WaitForSingleObject(wfi->updateSemaphore, INFINITE);

                    wfi->lastUpdate = wfi->nextUpdate;
                }
            }

            wf_info_unlock(wfi);
        }

        end = GetTickCount();
        diff = end - beg;

        if (diff < rate)
        {
            Sleep(rate - diff);
        }
    }

    return 0;
}
Exemple #2
0
static DWORD WINAPI wf_peer_mirror_monitor(LPVOID lpParam)
{
	DWORD fps;
	wfInfo* wfi;
	DWORD beg, end;
	DWORD diff, rate;
	freerdp_peer* client;
	wfPeerContext* context;

	fps = 24;
	rate = 1000 / fps;
	client = (freerdp_peer*) lpParam;
	context = (wfPeerContext*) client->context;
	wfi = context->info;
	
	while (1)
	{
		beg = GetTickCount();

		if (wf_info_lock(wfi) > 0)
		{
			if (wfi->peerCount > 0)
			{
				wf_info_update_changes(wfi);

				if (wf_info_have_updates(wfi))
				{
					wf_update_encode(wfi);
					SetEvent(wfi->updateEvent);
				}
			}

			wf_info_unlock(wfi);
		}

		end = GetTickCount();
		diff = end - beg;

		if (diff < rate)
		{
			Sleep(rate - diff);
		}
	}
	
	wf_info_lock(wfi);
	wfi->threadCount--;
	wf_info_unlock(wfi);

	return 0;
}
Exemple #3
0
DWORD WINAPI wf_update_thread(LPVOID lpParam)
{
	int index;
	DWORD fps;
	wfInfo* wfi;
	DWORD beg, end;
	DWORD diff, rate;

	wfi = (wfInfo*) lpParam;

	fps = wfi->framesPerSecond;
	rate = 1000 / fps;

	while (1)
	{
		beg = GetTickCount();

		if (wf_info_lock(wfi) > 0)
		{
			if (wfi->activePeerCount > 0)
			{
				wf_info_update_changes(wfi);

				if (wf_info_have_updates(wfi))
				{
					wf_update_encode(wfi);

					//printf("Start of parallel sending\n");

					for (index = 0; index < wfi->peerCount; index++)
					{
						if (wfi->peers[index]->activated)
						{
							//printf("Setting event for %d of %d\n", index + 1, wfi->activePeerCount);
							SetEvent(((wfPeerContext*) wfi->peers[index]->context)->updateEvent);
						}
					}

					for (index = 0; index < wfi->activePeerCount; index++)
					{
						//printf("Waiting for %d of %d\n", index + 1, wfi->activePeerCount);
						WaitForSingleObject(wfi->updateSemaphore, INFINITE);
					}

					//printf("End of parallel sending\n");

					wf_info_clear_invalid_region(wfi);
				}
			}

			wf_info_unlock(wfi);
		}

		end = GetTickCount();
		diff = end - beg;

		if (diff < rate)
		{
			Sleep(rate - diff);
		}
	}

	//printf("Exiting Update Thread\n");

	return 0;
}