winapi - 如何识别从 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;
}
解决方案
调用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;
}
推荐阅读
- python - 通过 bestSaveJoin 加入多个图像集合
- reactjs - React 中类组件之间的 const 值
- c++ - c++ 中的 g3log 记录器在记录器初始化时引入了停顿/延迟
- reactjs - React 我的组件不会在页面加载时呈现
- sql - 如何从具有唯一条件的组中仅选择 1 条记录
- php - 更改 Laravel Eloquent 集合的属性会更改每个引用
- react-native - 在 FlatList React Native 中显示 2 个标签
- php - 错误号:1054 'on 子句'中的未知列'2021-08-23'
- ios - 将监视扩展添加到 react-native IOS 项目时构建失败
- python - 如何制作用户资料视图?