QT开发中文网

写一个代码示例:C语言 windows平台 多线程编程 计算每个线程的真正执行耗时 精确到微秒

以下是一个使用C语言和Windows平台的多线程编程示例,它可以计算每个线程的真正执行耗时,精确到微秒。

#include <windows.h>
#include <stdio.h>

#define NUM_THREADS 4
#define LOOP_COUNT 100000

DWORD WINAPI ThreadFunc(LPVOID lpParam);

int main()
{
    HANDLE hThread[NUM_THREADS];
    DWORD dwThreadId[NUM_THREADS];
    int i;

    for (i = 0; i < NUM_THREADS; i++)
    {
        hThread[i] = CreateThread(NULL, 0, ThreadFunc, (LPVOID)i, 0, &dwThreadId[i]);
        if (hThread[i] == NULL)
        {
            printf("CreateThread failed (%d)\n", GetLastError());
            return 1;
        }
    }

    WaitForMultipleObjects(NUM_THREADS, hThread, TRUE, INFINITE);

    for (i = 0; i < NUM_THREADS; i++)
    {
        DWORD exitCode;
        GetExitCodeThread(hThread[i], &exitCode);
        printf("Thread %d executed for %d microseconds.\n", i, exitCode);
        CloseHandle(hThread[i]);
    }

    return 0;
}

DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
    int threadNum = (int)lpParam;
    LARGE_INTEGER frequency;
    LARGE_INTEGER startCount;
    LARGE_INTEGER endCount;
    QueryPerformanceFrequency(&frequency);
    QueryPerformanceCounter(&startCount);
    int i;
    for (i = 0; i < LOOP_COUNT; i++)
    {
        // Do some work here.
    }
    QueryPerformanceCounter(&endCount);
    return (DWORD)((endCount.QuadPart - startCount.QuadPart) * 1000000.0 / frequency.QuadPart);
}

在这个示例中,我们创建了4个线程并分别启动它们。每个线程执行一个简单的循环,模拟一些计算密集型工作。为了测量每个线程的真正执行耗时,我们使用了Windows提供的高精度计时器——QueryPerformanceCounterQueryPerformanceFrequency。在每个线程结束时,它会返回一个数值,表示它实际执行的时间,单位是微秒。

注意,在主线程中,我们使用了WaitForMultipleObjects函数等待所有线程结束。这是因为我们需要确保每个线程都完成了它的工作,才能获取正确的执行时间。

此外,我们还使用了GetExitCodeThread函数获取线程的退出码,它也就是该线程实际执行的时间(微秒)。

最后,我们将每个线程的执行时间打印出来,并关闭线程句柄,释放资源。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=323

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?