相关疑难解决方法(0)

如何在Linux上的c中睡眠或暂停PThread

我正在开发一个我做多线程的应用程序.我的一个工作线程在窗口小部件上显示图像.另一个线程播放声音.我想在按钮单击事件上停止/暂停/暂停/休眠线程.和点击视频播放器播放/暂停按钮时相同.我正在使用pthread库进行线程化在linux平台上用c ++开发我的应用程序.

有人能告诉我如何实现线程暂停/挂起吗?

c c++ pthreads

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

不使用条件暂停pthreads

我想暂停pthreads,但显然,没有像pthread_suspend这样的函数.我在某处读到了使用互斥锁和条件暂停pthreads并使用如下:

#include <pthread.h>

class PThread {
public:
pthread_t myPthread;
pthread_mutex_t m_SuspendMutex;
pthread_cond_t m_ResumeCond;

void start() {
pthread_create(&myPthread, NULL, threadRun, (void*)this );
}

Thread() { }

void suspendMe() {
pthread_cond_wait(&m_ResumeCond,&m_SuspendMutex);
}

void resume() {
pthread_cond_signal(&m_ResumeCond);
}
};
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么我们需要互斥和条件来暂停和恢复pthread.是否可以在不使用条件的情况下暂停和恢复它?

c++ linux pthreads

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

如何停止正在运行的pthread线程?

如何立即退出或停止线程?

当用户输入答案时,如何立即停止?我想让它重置每一个问题.

这是涉及线程的代码

int q1() {
    int timer_start;
    char ans[] = "lol";
    char user_ans[50];
    timer_start = pthread_create( &xtimer,NULL,(void*)timer_func,(void*)NULL);
    printf("What is the capital city of Peru?\n");

    while(limit){
        scanf("%s",user_ans);
        if(limit)
        {
             if(!strcmp(user_ans, ans))
              {

               // printf("YAY!\n");
                score++;
               // q2();

            }
            else
            {
                game_over();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c multithreading pthreads

5
推荐指数
3
解决办法
4万
查看次数

Java调试器:是否可以有选择地挂起线程?

在我过去作为C / C ++程序员的生活中,可能在某些平台和调试器组合上有选择地挂起线程。达到断点后,可以发出命令(或单击GUI中的内容)以对线程进行冰/除冰(挂起/唤醒)。在执行进一步的步骤/下一个/运行/继续命令时,挂起的线程将不执行任何指令。

今天,使用任何JVM或Java IDE都可以做到吗?我使用IntelliJ,但没有看到该功能,也无法通过Google找到任何信息。

澄清:

  1. 我不是在询问断点的线程策略,例如,暂停当前线程或所有线程。我知道该JVM调试器功能。
  2. 开发环境很普通:我使用IntelliJ Java IDE,并且可以访问有问题的源代码。

最后,我意识到“ Java调试器”是一个模糊的术语。在AFAIK中,Sun发布了一种在线调试格式,调试器使用该格式与JVM进行通信。也许每个JVM(IBM,Sun,IcedTea和???)都支持不同的调试功能,但是我只熟悉Sun / Oracle JVM。

java debugging jvm intellij-idea

5
推荐指数
1
解决办法
2113
查看次数

如何立即暂停一个线程?

假设有两个线程,其中一个线程具有更高的优先级,并且它们在同一核心(单核)上运行,我只想同时只工作一个线程。(也许你说这不是线程范例,但实际上我只是做了我的这里问题最小)

T1 ~~~e1~e2~e3~e4~...~~~~~~~eK~~~~~~~~...~~~ eN~~~~~ ///(e1...eN)packed as a task.
                |            |
T2 ~~~~~~~~~~~~pause~~~~~~continue~~~~~~~~~~~~~~~~~~ ///(pause & continue)is just title time for T1 that T2 is operating (T2 has more priority).
Run Code Online (Sandbox Code Playgroud)

**~**是 time ,并且**e**是在那里求值的表达式。整个 e1、e2、... 是一个函数,即 api 调用函数(任务),所以我只想在那里暂停 T1(~pause~)并运行我的 T2 直到完成,完成后继续 T1。

注意:我无法更换**e**工作(职能)。

我知道的?

创建条件变量(CV)并在完成时T2通知CV唤醒,但这不是我的成就,因为我想让T1立即在e4 暂停时间)中精确暂停并继续T2直到完成(或我的继续时间)。

我的知识与: https: //en.cppreference.com/w/cpp/thread/condition_variable#Example 我们是否有立即暂停的 thread::方法(强制上下文切换)?(我不是说屈服!)

c++ multithreading c++17 conditional-variable

-1
推荐指数
1
解决办法
101
查看次数