- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在多线程程序方面遇到问题。假设我有一系列的几个整数数组(通常是 2 或 3 个),每个数组都由一个单独的线程处理。我设法进行计算,但现在我想返回在我的线程内创建的已处理数组。
启动线程后,我启动以下循环,每 0.05 秒检查线程是否完成。这似乎工作正常。
int partsPassed = 0;
int* partsCopied;
partsCopied = (int*) malloc (numThreads * sizeof(int));
int currentCopyStatus = 0;
for (n = 0; n < numThreads; n++) {
partsCopied[n] = 0;
}
// Loop until we copy all parts of array
while (partsPassed != numThreads) {
// Loop through all parts of original array
for (n = 0; n < numThreads; n++) {
if (partsCopied[n] != 1) {
// Check for finish of computation
CmtGetThreadPoolFunctionAttribute(*threadPoolHandle, threadFunctionID[n], ATTR_TP_FUNCTION_EXECUTION_STATUS, ¤tCopyStatus);
if (currentCopyStatus == kCmtThreadFunctionComplete) { // If yes, get the array and copy to original array
CmtGetThreadPoolFunctionAttribute(*threadPoolHandle, threadFunctionID[n], ATTR_TP_FUNCTION_RETURN_VALUE, imageThreadPart[n]);
copyStaticThreadResults(imageRecPart[n]->nrRowStart, imageRecPart[n]->nrRowEnd, imageThreadPart[n]);
partsCopied[n] = 1; // Copy flag display
partsPassed++; // Count all fragments
}
}
}
Delay(0.05);
}
问题是,根据文档,我只能从线程中获取一个 int 值。当我尝试使用以下函数时,这会导致失败 - 我尝试获取 int** (存储在 imageThreadPart[n] 中的二维数组),并且该函数强制我传递 int*。
CmtGetThreadPoolFunctionAttribute(*threadPoolHandle, threadFunctionID[n], ATTR_TP_FUNCTION_RETURN_VALUE, imageThreadPart[n]);
<强>1。是否可以使用这个函数来获取这个数组?
<强>2。这可能是一个远景,但是否可以使用以下函数的回调来复制该数组,并将线程返回的值以某种方式直接传递给此回调?
CmtScheduleThreadPoolFunctionAdv (DEFAULT_THREAD_POOL_HANDLE,
myThreadFunction, // thread function
imageRecPart[n], // my data
THREAD_PRIORITY_TIME_CRITICAL,
copyThreadResults, // my callback
EVENT_TP_THREAD_FUNCTION_END,
NULL, // data for callback - but how to pass it from thread here?!
CmtGetCurrentThreadID(),
&threadFunctionID[n]);
最佳答案
所有线程共享相同的内存空间,因此您可以将数组复制到共享内存中的已知位置(也许是传递给线程过程的位置,也许是全局变量,也许是线程为自己分配的缓冲区并传递一个指针到)。请注意,为了确保对数据的更新在通知已写入之前到达其他 CPU 核心,您需要使用具有 memory_order_release
语义的原子状态变量或自旋锁.
关于C 线程,CVI : how to return array out of thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250575/
我正在尝试将一个简单的文本字符串从网站读取到我的 LabWindows CVI 程序中。我到处寻找,但找不到使用简单 HTTP GET 请求的示例。 有谁知道这是否可以在 LabWindows 中完成
我有两个(或更多线程)并行工作。它们的目的是测量硬件设备,并且它们依赖于外部硬件刺激。在执行过程中的某个时刻,它们会触发硬件设备并等待刺激。但我只有一个刺激装置。 因此线程必须等待,直到每个线程都准备
我正在使用 NI 的 Labwindows CVI,并且正在尝试集成源代码控制。据说它适用于任何适合 MS API (MSSCC/SCC) 的东西,但我在实践中没有发现这种情况。如果有一个 SVN 服
昨天,我发现当我用C运行一些简单的代码时,CVI可以检测到缓冲区溢出,这让我很困惑。 void main(void) { int a[10]; int buf[10]; int test[10]
我在多线程程序方面遇到问题。假设我有一系列的几个整数数组(通常是 2 或 3 个),每个数组都由一个单独的线程处理。我设法进行计算,但现在我想返回在我的线程内创建的已处理数组。 启动线程后,我启动以下
我想将 Python IDLE-esque 命令提示界面集成到现有的 NI-CVI (LabWindows) 应用程序中。我试图关注 Python.org 的讨论,但似乎迷失在细节中。有像我这样的傻瓜
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
使用 Windows 所以我正在从一个二进制文件中读取一个无符号整型数据值的列表。该文件包含许多按顺序列出的数据集。这是从指向其开头的 char* 读取单个数据集的函数: function read_
我正在开发具有几个以太网端口的测试设备。作为测试的一部分,我想检查连接测试设备时以太网端口的当前速度(10/100/1000)。 我怎样才能得到这些信息?我可以使用 C 库或 CMD 命令来提供此信息
我目前正在开发一个 cvi 应用程序,我需要在其中检索当前构建目录的每个 .wav 文件。为了在 C 中这样做,我在以下函数中使用了 Windows 内置函数 FindFirstFIle 和 Find
我希望能够在命令行上使用 lsco 以更好地与 Emacs 集成,但它运行得非常慢! 通常,GUI 比较慢! 最佳答案 来自技术说明“Recursively checkout and checkin
我是一名优秀的程序员,十分优秀!