首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果线程函数包含"printf()“,SetThreadAffinityMask()似乎无法工作

如果线程函数包含"printf()“,SetThreadAffinityMask()似乎无法工作
EN

Stack Overflow用户
提问于 2015-12-09 13:53:37
回答 1查看 873关注 0票数 0

我编写了一个测试程序来绑定CPU.Here上的线程,这是我的测试代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
DWORD WINAPI ThreadFunc(LPVOID pM) {
    while(1) {
        printf("Doesn't work anymore");   //If i add this printf function,the setthreadaffinitymask seems doesn't work anymore.Which u can see from two pictures i post.
    }
}
int main() 
{
    HANDLE h;
    DWORD_PTR RetFlag;
    h = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
    if((RetFlag = SetThreadAffinityMask(h, 0x08)) == 0)
        printf("SetThreadAffinityMask fails\n");
    WaitForSingleObject(h, INFINITE);
    return 0;
}

当然,正确的结果应该像pic one.But,如果我在线程函数中添加printf()函数,会发生什么?我不知道有什么窍门吗?谢谢.

EN

回答 1

Stack Overflow用户

发布于 2015-12-09 14:12:58

我认为这种关联确实有效,但这里的问题是,printf()编写了一些文本(到控制台?)并同步等待文本被写入。

现在,这个文本必须打印在某个地方,而在某个地方负责一个不同的线程/进程,它甚至可以是磁盘或网络的真实I/O。这就是为什么您看到CPU3的CPU使用量下降的原因:等待I/O完成的是空闲的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34180528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档