首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建线程

创建线程
EN

Stack Overflow用户
提问于 2014-03-24 09:56:14
回答 3查看 87关注 0票数 0

我知道我可以用CreateThread()在程序中创建一个线程,在返回到原来的程序之前,我需要WaitForSingleObject()来完成它。

我的问题是,原来的程序也是一个线程吗?比方说,我的程序中有一个变量a=3,然后创建一个线程。从第二个线程,我可以访问变量a吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-24 09:59:03

当Windows /S启动进程时,它还将为该进程创建第一个线程。

因此,“原始程序”是错误的名称。但是正在执行progra的初始项是一个线程。

当您的变量范围允许从第二个线程进行访问时,您就无法访问它。如果要传递对特定变量的访问权限,可以使用适当的参数向CreateThread传递指向该变量的指针。但是要小心:当原始线程的执行超出了这个变量的作用域时,指针就无效了。我建议考虑重新设计。

请按要求编辑,下面是一个变量超出作用域的示例。这将是一个错误的实现:

代码语言:javascript
运行
AI代码解释
复制
DWORD TheThread(void*p)
{
    int *pcounter = (int*)p;
    // do anything with pcounter
}

HANDLE MakeItRun()
{
    int counter;
    return CreateThread(0, 0, &TheThread, &counter, 0, 0);
} // scope of counter ends here

int main()
{
    HANDLE h;
    h = MakeItRun();
    WaitForSingleObject(h, INFINITE);
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-24 10:16:54

这不管用:

代码语言:javascript
运行
AI代码解释
复制
DWORD WINAPI threadProc(LPVOID param)
{
    a = 5;
}

int main()
{
    int a = 3;
    HANDLE thread = CreateThread(NULL, 0, threadProc, NULL, 0, NULL);
    WaitForSingleObject(thread, INFINITE);
}

编译器将发出一个错误,告诉您athreadProc中未声明。

不过,您可以传递一个指针:

代码语言:javascript
运行
AI代码解释
复制
DWORD WINAPI threadProc(LPVOID param)
{
    int *aPtr = (int *)param;
    *aPtr = 5;
}

int main()
{
    int a = 3;
    HANDLE thread = CreateThread(NULL, 0, threadProc, &a, 0, NULL);
    WaitForSingleObject(thread, INFINITE);
    // value of a is now 5
}

这是一种完全正确的技术,只要您确保堆栈变量的作用域超过线程。

您还可以在具有全局变量或其替代形式(单例类、静态类变量)的线程之间共享内存。

票数 1
EN

Stack Overflow用户

发布于 2014-03-24 09:59:11

是的-线程是操作系统执行的基本单位。没有三分,没有跑动。

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

https://stackoverflow.com/questions/22617009

复制
相关文章
Android网页打开指定App
首先,要给你要打开的应用中的activity设置过滤器,一般是启动的activity。
xiangzhihong
2022/05/09
2.4K0
App在后台运行的思与做
前言: 当一个应用程序在后台运行时,它在屏幕上是不可见的。当用户启动另一个应用程序或返回到主屏幕时,应用程序从前台切换到后台。当然,应用程序也可以在后台启动或恢复,以处理特定的事件。 失活的操作 当一个正在前台的应用程序移动到后台时,UIKit首先调用applicationWillResignActive:方法来禁用应用程序(使App失活)。当App失活,会做出以下几点操作: 1、将用户数据保存到磁盘并关闭任何打开的文件: 应用程序被终止时,始终保存用户数据。同样用户锁住设备时,关闭文件。 2、只做
Dwyane
2018/06/12
1.4K0
如何使程序在Linux后台运行
这样一来,test程序就在后台运行了。但是,这样处理还不够,因为这样做虽然程序是在后台运行了,但log依然不停的输出到当前终端。因此,要让终端彻底的清静,还应将log重定向到指定的文件:
阿凡亮
2020/04/14
9.7K0
在Windows上如何后台运行JuiceFS
JuiceFS的Badger引擎改造完成以后,需要在Windows下面进行后台运行。因为现有的JuiceFS中还没有在Windows下的后台运行实现,所以需要通过其他途径解决。
用户1260683
2022/03/30
3.5K0
在Windows上如何后台运行JuiceFS
使程序在Linux下后台运行
我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:
SingYi
2022/07/14
5K0
在 Linux or windows 上后台运行服务
  此时可以访问 http://ip:8000 验证服务是否成功启动了(详细操作见另一篇文章-Python 一行搭建文件服务器)
我是胖虎啊
2022/06/27
4K0
在 Linux or windows 上后台运行服务
Azure 使用 Web App 服务运行 Docker 镜像
最近在完善 CanalSharp 的文档,采用的是 vuepress 生成的文档网站,生成以后变考虑如何部署这个文档,考虑过 github pages,但是不想将这堆生成出来的文件往仓库里面加,所有便想着寻找其他方法。在 Azure 上看到了 Web App 这个服务,发现部署比较简单、快速,并且支持 github ci/cd ,下面分享一下我的使用记录。
晓晨
2021/01/06
8990
[Tensorflow] 在Android运行TensorFlow模型
以下代码来自于TensorFlowObjectDetectionAPIModel.java
wOw
2018/09/18
2.2K0
【Android初级】如何让APP无法在指定的系统版本上运行
随着市面上越来越多三方APP的出现,某些手机厂商也开始对这些APP进行了安装限制或者运行限制,或者三方APP自身的版本过低,无法被特定的系统版本所支持。
netkiller old
2021/02/12
3.7K0
【Android初级】如何让APP无法在指定的系统版本上运行
在云主机后台进行python程序运行
nohup python main.py & nohup liunx自带的命令 注意:后面(&)!
py3study
2020/01/20
2.1K0
Android 运行时权限及APP适配
Android 6.0起,Android加强了权限管理,引入运行时权限概念。对于: 1. Android 5.1(API 22)及以前版本,应用权限必须声明在AndroidManifest.xml中,应用在安装时,Android会列出其所需的所有权限供用户确认安装。 2. Android 6.0(API 23)及以后版本,应用权限必须声明在AndroidManifest.xml中,但权限分为普通权限(Normal Permissions)和危险权限(Dangerous Permissions),以下会介绍区
宋凯伦
2018/04/02
1.5K0
Android 运行时权限及APP适配
在Spring Boot中配置web app
正如我们之前文章中提到的,要想配置端口需要在application.properties文件中配置如下:
程序那些事
2020/07/07
2K0
Android 运行时权限及APP适配
Android 6.0起,Android加强了权限管理,引入运行时权限概念。对于:
宋凯伦
2018/07/31
1.5K0
Android 运行时权限及APP适配
Android开发:App点击跳转到网页的实现
App里面的代码根据网址链接进行网页跳转是比较常用的方式,而且这种方式也比较简单,这里按照facebook来进行举例说明,具体代码如下所示:
网易Leo
2021/12/04
2.9K0
Android开发:App点击跳转到网页的实现
App里面的代码根据网址链接进行网页跳转是比较常用的方式,而且这种方式也比较简单,这里按照facebook来进行举例说明,具体代码如下所示:
三掌柜
2021/12/01
1.2K0
app后台技术
首先应用程序框架,随你自己业务需求而定,可以选择SSH或者SSM,或者看自己业务量大小。
PM吃瓜
2019/08/12
1K0
app后台技术
在Android系统上运行frp
一时兴起,想在Android上跑一下frpc,本来以为需要在PC上交叉编译后放到机器上才行,后来发现好像更简单,Android YYDS!
老高的技术博客
2022/12/28
4.9K0
在Android系统上运行frp
Android 后台运行白名单,优雅实现保活
我们知道,Android 系统会存在杀后台进程的情况,并且随着系统版本的更新,杀进程的力度还有越来越大的趋势。系统这种做法本身出发点是好的,因为可以节省内存,降低功耗,也避免了一些流氓行为。
NanBox
2020/01/03
9.4K1
在linux后台运行脚本的方法和命令
后台运行脚本 执行脚本test.sh:./test.sh 中断脚本test.sh:ctrl+c 在1的基础上将运行中的test.sh,切换到后台并暂停:ctrl+z 执行ctrl+z后,test.sh在后台是暂停状态(stopped),使用命令:bg number让其在后台开始运行(“number”是使用jobs命令查到的 [ ]中的数字,不是pid) 直接在后台运行脚本test.sh:./test.sh & 查看当前shell环境中已启动的任务情况:jobs 将test.sh切换到前台运行:fg %number(”number”为使用jobs命令查看到的 [ ] 中的数字,不是pid) 中断后台运行的test.sh脚本:先fg %number切换到前台,再ctrl+c;或是直接kill %number 以上两种在后台运行test.sh的方法,当遇到退出当前shell终端时,后台运行的test.sh也就结束了。这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程的父进程是当前shell终端进程,关闭当前shell终端时,父进程退出,会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。所以要想退出当前shell终端时test.sh继续运行,则需要使用nohup忽略hangup信号。
大数据流动
2020/06/19
4K0
点击加载更多

相似问题

Android:后台运行App

22

android studio运行app后台运行

21

后台运行的Android Unity App

1113

Android app:后台运行的是什么?

31

即使app不在运行或者不在后台,如何调用web服务?Android

13
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档