问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于c/c++中多线程的使用

发布网友 发布时间:2022-04-26 18:41

我来回答

3个回答

热心网友 时间:2023-10-21 14:00

1、首先 printf 根据链接的运行时库不同,是分担线程和多线程版本,你这个应该链接多线程版本,否则会出现这种奇怪的错误。

2、这种传递参数是可行的。将结构体的指针作为这个唯一的参数传过去就可以了
要注意变量的作用域。

热心网友 时间:2023-10-21 14:01

第一个出现那样的错误,和线程调度是有关系,如果创建一个线程之后,让主线程Sleep(1000),
就能的到你想要的结果,如下:
h = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)add,NULL,0,&id);
Sleep(1000);
h1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sub,(LPVOID) 2,0,&id1);
Sleep(1000);
第二问题:答案是可行的,看了下msdn ,那里面给的解释是只能传一个参数追问亲,我知道延迟1秒后结果正确,但是我想知道为什么会出现这样的错误,cpu明明不按照我说的做了嘛。我让他调度一次h那个线程,他居然调度了两次,而且还遗忘了h1那个线程。请问这是为什么?

追答你运行一个exe程序,那么可以认为你启动了一个进程,进程中以main函数为主线程运行,一个线程运行需要资源,当一个线程阻塞,那么可能变成挂起或阻塞状态,等到线程拿到需要的资源和时间片,才能运行,这时它会去执行其他线程或进程,线程没结束之前,被阻塞,那么会保存当前的的运行状态和资源等一些记录,如果在printf处被阻塞,那么等拿到了资源和时间片之后,会重新执行printf语句,如果主线程执行完成,子线程还处于阻塞状态,那么资源也是会被释放掉的,也就是说存在显示的可能,这些都是线程调度问题,得到资源和时间片就会运行

热心网友 时间:2023-10-21 14:01

我试过是不会的,不知道你怎么会出现这种情况
你说的参数问题,CreateThread倒数第三个参数是个void指针,用来传递线程参数,任何对象取地址传递进去就是了,进了线程再解指针。

附上我测试的代码:
#include "stdafx.h"
#include "windows.h"
#include "conio.h"

int add()
{
printf("The result is %d\n", 1 + 2);
return 0;
}

int sub()
{
printf("The result is %d\n", 1 - 2);
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
DWORD id1;
DWORD id2;
HANDLE h1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)add, NULL, 0, &id1);
HANDLE h2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)sub, NULL, 0, &id2);
WaitForSingleObject(h1, INFINITE);
WaitForSingleObject(h2, INFINITE);
_getch();
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我网贷一万,手续费300,分24期,每期506.67,请问怎么计算月息,和年利率... 多普达手机铃音多普达手机铃声 【车载软件推荐】有车一族必备软件有哪些?好用的车主必备app 我画画时常被说我画画不动脑筋,弱弱的问一句,画画怎样动脑筋? 三星手机如何设置时间在桌面显示? 精确到十分位,要看小数点右边第一位 对吗 要把一个小数精确到十分位,就要看这个小数的( )A.十分位B.百分位C... 黑米算不算粗粮 存定期协议利率选是还是否? 同城上那些卖二手ndsi的是真的吗? C# 关于多线程和CPU的问题 VC++多线程问题 C语言多线程问题:如何让下面两段代码同时运行 就是播放生日歌的同时输出文字 C++ 多线程多进程问题 C多线程参数传递问题 关于c++中多线程的问题 邮政卡在取款机转帐给平安银行要多久才到帐 C++多线程问题 我在邮政银行自动存取款机转账50000元,出夕转的,跨行转账多长时间能到账? C/C++多线程问题? 邮政储蓄银行自助取款机转账多长时间到账 在中国邮政用atm跨行转账要多久啊,我这24小时还没有到账 邮政储蓄银行 atm跨行转账到工商银行需要多长时间? Excel2013怎么设置打开密码? C语言读程序题,写程序题。给200!越快越好! c语言读程序的题? C语言程序阅读题 C 语言 程序阅读题 C语言:读程序题 C语言读程序题,高分跪求达人,在线等。程序如下: 请问下自动取款机跨行转账要多久到帐 word插入怎么做 苹果手机指纹没有了怎么办呀 苹果6为什么设置不了指纹? 为什么iPhone6无法录入指纹? iPhone6为什么无法添加指纹?还有那个Touch ID和密码不在设置通用里面, 为什么iPhone6录不了指纹? 如何将录屏转换为gif 如何对STM8S的闪存存储器和数据EEPROM编程 stm8s的变量tiny和near有什么区别 stm8s207是什么集成电路? stm8s单片机,掉电存储 stm8s单片机nrst脚能作输出吗 如何使用STM8S单片机的多通道AD转换 关于STM8S awu的问题 如何使用STM8S微控制器中的AD转换 STM8S系列单片机如何使用printf函数 stm8s207是什么集成电路 怎样编程操作stm8的option byte 微信身份证怎么认证?