首页 > 解决方案 > 如何识别从 msvc 中的线程或进程调用的函数

问题描述

我有如下程序,函数 Foo 由线程和主进程调用。现在如何识别函数Foo是由线程或主进程调用的。

#include <Windows.h>
#include <stdio.h>
DWORD WINAPI Foo(LPVOID lPtr);
int main()
{
    DWORD dwExitCode;
    DWORD dwThreadID;
    HANDLE hT[10];
    int i;
    for( i = 0; i<5; i++)
    hT[i] = CreateThread(
        NULL,
        0,
        Foo,
        0,
        0,
        &dwThreadID
        );
        fflush(stdout); 
    Foo(0);
    return 0;
}

DWORD WINAPI Foo(LPVOID lPtr){
  printf("\ninside the Function");
  return 0;
}

标签: winapimsdnmsvc12

解决方案


调用GetCurrentThreadId()in main(),再调用 in ,Foo()看看这两个值是否匹配,例如:

#include <Windows.h>
#include <stdio.h>

DWORD WINAPI Foo(LPVOID lPtr);
DWORD dwMainThreadId;

int main() {
    DWORD dwExitCode;
    DWORD dwThreadID;
    HANDLE hT[10];
    int i;

    dwMainThreadId = GetCurrentThreadId();

    for( i = 0; i<5; i++)
        hT[i] = CreateThread(
            NULL,
            0,
            Foo,
            0,
            0,
            &dwThreadID
        );
    fflush(stdout);
    Foo(0);
    return 0;
}

DWORD WINAPI Foo(LPVOID lPtr){
    DWORD dwThisThreadId = GetCurrentThreadId();
    printf(
        "\ninside the Function in thread %u (%s)",
        dwThisThreadId,
        (dwThisThreadId == dwMainThreadId) ? "main" : "worker"
    );
    return 0;
}

推荐阅读