gpt4 book ai didi

c - Teamcenter ITK 中的多线程

转载 作者:行者123 更新时间:2023-11-30 15:57:02 26 4
gpt4 key购买 nike

我正在尝试编写一个 Teamcenter ITK 程序,该程序将作为从主线程调用的不同线程运行。主线程是从 UI 上的操作调用的。由于子线程需要花费大量时间才能完成,如果我不创建子线程并将代码放在主线程中,UI 将卡住长达 10 分钟,这是 Not Acceptable 。

主线程和子线程都需要共享由主线程完成的身份验证,因为我使用的是 SSO。他们还需要连接到数据库。最后,主线程不应该等待子线程完成,否则拥有子线程的整个目的就会落空。

调用子线程的代码是这样的:

handle = (HANDLE) _beginthread (submitToPublishTibcoWf, 0, &input); // create thread
do
{
sprintf(message, "Waiting %d time for 1000 milliseconds since threadReady is %d\n", i++, threadReady);
log_msg(message);
WaitForSingleObject(handle, 1000);
}
while (!threadReady);

sprintf(message, "Wait for thread to be ready over after %d tries since threadReady is %d\n", i, threadReady);
log_msg(message);
log_msg("Main thread about to exit now");

每当我要在子线程中执行需要 8 分钟运行的代码段时,我都会设置 threadReady = 1 全局变量。

问题是主线程退出后子线程行为异常,我收到此错误:

Fri May 25 11:34:46 2012 : Main thread about to exit now
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

大多数子线程都会执行,但有时它会在最后崩溃。

最佳答案

为了防止子线程退出,我们可以使用分离来使子进程独立并且不希望加入父进程。因此我们不应该加入子进程,之后我们必须从主线程分离:

pthread_create(th, attr, what);
pthread_detach(th);
// and never join

另外:

  1. 如果您想提高应用程序的效率,我建议不要使用像threadReady这样的详尽监听来观察信号的特殊事件。相反,请在 pthread 或其他信号方法(如 gObject)中使用条件变量。
  2. 您在线程之间共享一些数据,它可能会面临互斥问题以及多处理或多线程应用程序中可能发生的其他问题。相反,请尝试使用互斥体或互斥体等机制来手动处理此问题条件变量信号量。

关于c - Teamcenter ITK 中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10759449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com