Как определить функцию, вызванную из потока или процесса в msvc - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть программа, как показано ниже, функция Foo вызывается threds и main process. Теперь, как определить функцию 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;
}

1 Ответ

2 голосов
/ 12 февраля 2020

Вызовите GetCurrentThreadId() в main() и снова в 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;
}
...