标签: worker-thread

哪个功能更有效?

使用线程时,'invoke'用于避免'交叉线程'(1)

但是,有时'计时器对象'被用来避免'CrossThread'(2)

像这样(例如)

public partial class Form1 : Form
{

    private bool bCheckState = false;

    public Form1()
    {
        InitializeComponent();
    }

    //Button Click
    private void btnWork_Click(object sender, EventArgs e)
    {
        Thread m_Thread = new Thread(new ThreadStart(Work));
        m_Thread.Start();

    }

    private void Work()
    {
        bCheckState = true;            
        // not use invoke 
    }


    private void timer_Tick(object sender, EventArgs e)
    {
        if (bCheckState)
        {
            //tbxDisplay is winform's textBox control - printing data
            tbxDisplay.Text = bCheckState.ToString();
            bCheckState = false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

哪一个更有效?'(1)和(2)之间'


如果我们在"计时器事件"中检查后在"线程"中分散处理的数据,而不使用"调用"或其他方法,是否会出现问题?(我们听说在打印'thread'中处理的数据时要避免'Cross-Thread',在'timer event'中散布带有附加'timer object'的数据经常被使用,因为它既不有益也无害.

c# worker-thread winforms

4
推荐指数
1
解决办法
238
查看次数

从父线程终止Worker线程 - MFC

我刚开始学习MFC,我正在编写一个基于对话框的应用程序,以便更好地理解多线程.

主对话框有一个进度条,一个开始按钮和一个取消按钮.

单击开始按钮,我正在创建一个工作线程来进行一些处理(通过API调用),主线程负责进度条.

我已经定义了几个Windows消息来更新并停止进度条状态

WM_UPDATE_CONTROL
WM_STOP_CONTROL
Run Code Online (Sandbox Code Playgroud)

下面是我到目前为止创建的代码

HWND* phObjectHandle;
CWinThread* thread;

void CprogCtrlDlg::OnBnClickedStart() {
    phObjectHandle = new HWND;    // Set object handle for Worker thread
    *phObjectHandle = GetSafeHwnd();

    // create worker thread
    if(NULL == (thread = AfxBeginThread(ThreadFunc, phObjectHandle))) {
        EndDialog(IDCANCEL);
    }

    AfxMessageBox(L"Thread started");
    // Set Progress bar to marquee
}

void CprogCtrlDlg::OnBnClickedCancel() {
    // kill the Worker thread
}

UINT CprogCtrlDlg::ThreadFunc(LPVOID pParam) { 
    HWND *pObjectHandle = static_cast<HWND *>(pParam);
    CprogCtrlImpDlg* threadDlg = (CprogCtrlImpDlg*) pParam;

    return threadDlg->ThreadFuncRun(pObjectHandle);
}

UINT CprogCtrlDlg::ThreadFuncRun(HWND* pObjectHandle) { …
Run Code Online (Sandbox Code Playgroud)

mfc multithreading worker-thread visual-c++

4
推荐指数
1
解决办法
3305
查看次数

节点:错误选项:--experimental-worker

我正在尝试在node.js.

const { Worker, isMainThread, parentPort } = require('worker_threads');
if (isMainThread) {
    // This code is executed in the main thread and not in the worker.

    // Create the worker.
    const worker = new Worker(__filename);
    // Listen for messages from the worker and print them.
    worker.on('message', (msg) => { console.log(msg); });
} else {
    // This code is executed in the worker and not in the main thread.

    // Send a message to the main thread.
    parentPort.postMessage('Hello world!'); …
Run Code Online (Sandbox Code Playgroud)

javascript worker-thread node.js

4
推荐指数
1
解决办法
2466
查看次数

如何防止Node.js 12辅助线程立即终止?

我有一个运行Express服务器的Node.js应用程序和一个定期执行某些操作的工作线程

当服务器停止时,我需要清理与工作线程启动时打开的外部系统的连接。

我试图在进程上为SIGTERM和SIGINT信号添加一个处理程序,但这没有用,工作线程中的处理程序函数未调用,当父进程接收到SIGINT或SIGTERM时,它会立即以退出代码1退出。父进程也有这些其中的处理程序被调用。

这是重现此问题的简单代码示例:

start.js

const http = require("http");
const express = require("express");
const path = require("path");
const { Worker } = require("worker_threads");

let myWorker = null;

process.on("SIGTERM", stop);
process.on("SIGINT", stop);

const app = express();
const server = http.Server(app);

myWorker = new Worker(path.join(__dirname, "./worker.js"));

myWorker.on("exit", code => console.info(`Worker exited with code ${code}`));

server.listen(3000);

function stop() {
  console.log("Main process: stop()");
  process.exit(0);
}
Run Code Online (Sandbox Code Playgroud)

worker.js

process.on("SIGTERM", stop);
process.on("SIGINT", stop);

setInterval(() => console.log("beep"), 1000);

function stop() {
  console.log("Worker process: stop()"); …
Run Code Online (Sandbox Code Playgroud)

javascript multithreading worker-thread node.js

4
推荐指数
1
解决办法
230
查看次数

403禁止在工作模式下使用php.仅限浏览器中的php文件

首先让我开始说是的,我已经在google和stackoverflow专门搜索了这个,我找到了很多答案,并尝试了所有.在这一点上,我相信我唯一的资源是自己发布问题,即使情景重复,请尽量善于帮助.

情况非常基本,在Ubuntu桌面10.04上,我根据本指南及其衍生产品通过Synaptic和Php5设置了apache .此时,如果我继续使用命令行并调用php脚本,它可以工作,例如:

  php test.php
Run Code Online (Sandbox Code Playgroud)

输出我的问候世界没有任何问题.但是,如果我去firefox并指向test.php它将显示403错误禁止...

我已将/ var /,/ var/www /和/var/www/test.php的所有权更改为我能想到的每个变量(www-data [apache以此用户身份运行],purefan [我的普通用户],root )它没有任何区别,我也多次更改权限777,0777(只是为了安全),644,755,没有变化.从CLI我把phpinfo放到一个文件中并在这里添加它.

如果我没有弄错,那么当Apache调用php解释器时就会发生问题,就像我去http://localhost/index.php那样,它显示了apache的默认"It Works!" 页面,但如果我将php内容添加到该文件,它只是被忽略,但没有显示错误(也检查错误日志和syslog).

所以,如果你有任何建议让我知道,这不是一个生命或死亡的事情,但真的想建立使用工人而不是prefork.

感谢您的时间

php fastcgi apache2 worker-thread http-status-code-403

3
推荐指数
1
解决办法
7043
查看次数

共享工作人员在打包应用程序之前工作,但在打包应用程序之后不工作(电子)

我有一个电子应用程序,我试图将一些 CPU 密集型任务推送到工作线程。当我使用启动应用程序时,这效果很好npm start,但是在打包应用程序(使用带有 --asar 的电子打包器)后,工作线程似乎停止工作。我正在加载工作线程,如下所示:

const workerThread = new SharedWorker(path.join(__dirname, "JS/JS_MainWindow/worker.js"));
Run Code Online (Sandbox Code Playgroud)

我很困惑是什么原因导致了这个问题,但有可能是 appl 被打包到 ASAR 文件夹中吗?我非常有信心我有正确的路径来加载工作文件,因为我正在加载具有相同路径的其他几个图像。

javascript worker-thread electron

3
推荐指数
1
解决办法
1294
查看次数

Node.js 多线程:什么是工作线程,它是如何工作的?

我一直认为 JS 是一种单线程语言,这使得它对于 CPU 密集型任务效率低下。我最近遇到了工作线程以及它如何通过创建“一个进程下的多个工作线程”来解决这个低效率问题。进程和线程有什么区别?为什么 JS 突然能够产生多个工作线程来帮助主 JS 线程并与之交互以实现并发?你能帮我通俗地理解这个话题吗?谢谢

javascript multithreading single-threaded worker-thread node.js

3
推荐指数
1
解决办法
1097
查看次数

是否可以使用 Node 工作线程来执行数据库插入?

我最近阅读了 Node 的“worker_threads”模块,该模块允许在多个线程中并行执行 Javascript 代码,这对于 CPU 密集型操作非常有用。(注意:这些不是 Chrome 在浏览器中制作的网络工作者)

我正在构建一个功能,我需要在不阻止浏览器的情况下执行大量 Postgres INSERT。

问题是:在我实例化 worker 的 Javascript 文件中,我不允许导入任何内容,包括本机 Node 模块或 NPM 库,如执行数据库查询所必需的 Knex.js。我收到一条错误消息:文件一执行,就不能在模块外使用 import 语句

我试过将工作代码放在另一个文件中,顶部有一个导入语句(同样的错误)。我尝试将 Knex 对象提供给 workerData,但它无法克隆非本地 JS 对象。

我没有想法 - 如果我们不能导入任何 NPM 库,有没有人知道如何在工作线程中与数据库交互?!?!

// mainThread.js

const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');

import knex from 'knex'; // --> *** UNCAUGHT EXCEPTION: Cannot use import statement outside a module ***

if (isMainThread) {
  module.exports = async function runWorker (rowsToInsert = []) {
    return new …
Run Code Online (Sandbox Code Playgroud)

worker-thread node.js import-module node-cluster node-worker-threads

3
推荐指数
1
解决办法
2275
查看次数

如何在取消工作线程中的操作时防止内存泄漏?

目前我正在开发一个包含数学分析的桌面应用程序.我使用qt进行GUI和用c ++编写的项目.当用户开始分析时,我打开一个工作线程并启动一个进度条.到目前为止一切正常,当用户取消操作时问题开始.操作很复杂,我使用了几个函数和对象,我在几个分配/解除分配内存我想知道如何在取消操作中恢复.因为可能存在内存泄漏.我应该使用哪种模式或方法来强制安全地取消操作?

我的想法是抛出异常,但操作真的很复杂,所以我应该把try-catch放到我的所有函数中,还是有更通用的方式,模式..

编辑:问题是我的对象在范围之间转移,所以shared_ptr或auto_ptr不能解决我的问题,Flag的想法可以,但我认为它需要这么多代码,应该有一个简单的方法.

c++ qt memory-leaks design-patterns worker-thread

2
推荐指数
1
解决办法
1874
查看次数

为什么 Node.js 每个进程旋转 7 个线程

当 Node.js 进程启动时,top 命令显示有 7 个线程附加到该进程。所有这些线程都在做什么?此外,随着 API 负载的增加,请求处理程序本身会异步等待其他上游 API 调用,Node 是否会产生额外的工作线程?我在顶部看到它确实做到了这一点。但我认为这只发生在文件 I/O 上。为什么需要这些额外的工作线程?

javascript worker-thread node.js

2
推荐指数
1
解决办法
861
查看次数