1

我在 DEV C++ 上编译我的应用程序,并使用 pthreads 库进行多线程。我的主线程包括将“Hello World”打印到屏幕的开头(0,0)。我新创建的线程包括将“星期一”打印到屏幕中间的顶行 (0,60)。由于我使用的是 pthread,它们同时执行,这很好。但是,由于只有 1 个光标,它一次只能打印一个。我希望它们都在它们执行的确切时刻被打印出来。我用简单的 cout << "Hello World"; 写到屏幕上。

我是否需要某种类型的 curses 库来在它们执行的确切时间编写多个字符串?或者我可以通过标准 C++ 来实现吗?请记住,我想输出 2 个东西,它一次输出一个。如何在不同坐标处同时输出 2 个字符串?

4

2 回答 2

1

就像 David H 在评论中所说,使用一个线程写入显示器,并有一个队列。

队列可能包含一些这样的数据:

class printing
{
 public:
   printing(int x, int y, const std::string &str);

 private:
   const std::string m_str;
   int m_x;
   int m_y;
};

std::queue<printing> print_queue;

您将需要一个互斥锁或类似的东西来向队列添加/删除东西。

std::mutex print_queue_mutex;

void add_printing(printing &pr)
{
    print_queue_mutex.lock();
    print_queue.push_back(pr);
    print_queue_mutex.unlock();
}

我会让您弄清楚如何执行实际的“从队列中打印”功能。它遵循相同的原则。

于 2012-12-26T17:35:54.840 回答
0

创建线程在写入屏幕之前必须获取的锁。

于 2012-12-26T23:45:36.413 回答