C++;程序线程概念 我试图写一个相当简单的C++程序。它由三部分组成: 串行客户端:应连续轮询串行服务器并将收到的值保存在表中,具有无限for循环以继续轮询串行服务器 日志记录:每隔几秒钟将当前表值写入带有时间戳的.csv文件 菜单:启动/停止服务器并退出程序的简单命令行菜单
我曾尝试使用pthread和boost::thread使这三个函数同时出现,但运气不太好C++;程序线程概念 我试图写一个相当简单的C++程序。它由三部分组成: 串行客户端:应连续轮询串行服务器并将收到的值保存在表中,具有无限for循环以继续轮询串行服务器 日志记录:每隔几秒钟将当前表值写入带有时间戳的.csv文件 菜单:启动/停止服务器并退出程序的简单命令行菜单,c++,multithreading,C++,Multithreading,我曾尝试使用pthread和boost::thread使这三个函数同时出现,但运气不太好 有谁能给我一点关于这一切的指导吗,我对线程技术还不熟悉,也许线程技术在这里甚至不是正确的方法。这是一个非常常见的问题 通常,应用程序的主线程将: 设置串行连接 驱动菜单(用户输入等) 串行连接将有一个侦听线程。当通过串行连接接收数据时,它将触发一个数据接收事件,该事件将由主应用程序处理。通常,您会使用许多可用的库对象中的一个来简化串行端口通信。这将减少你自己设置和管理监听线程的工作量。在这种情况下,您只需将
有谁能给我一点关于这一切的指导吗,我对线程技术还不熟悉,也许线程技术在这里甚至不是正确的方法。这是一个非常常见的问题 通常,应用程序的主线程将:
如果事件处理程序(在串行侦听线程上调用)和主应用程序线程都在访问一些共享数据(您提到的数据表),那么您需要使用同步优先级(例如CriticalSection、Mutex等)保护对此对象的访问,以避免并发访问(一个线程(串行侦听线程)当另一个线程(主应用程序线程)正在读取或从数据结构中提取数据时,写入或添加到数据结构中。以下是一种方法,可以满足您的要求:
boost::mutex mtx;
void poll_thread()
{
while(!done) {
poll_for_data();
if(data_received) {
boost::unique_lock<boost::mutex> lock(mtx);
//write data to table
}
}
}
void log_thread()
{
while(!done) {
sleep(1);
boost::unique_lock<boost::mutex> lock(mtx);
//log table to csv file...
}
}
int main()
{
//create and start the polling and logging thread
boost::thread th1(&poll_thread);
boost::thread th2(&log_thread);
//run the menu
while(!done) {
//...
}
th1.join();
th2.join();
return 0;
}
boost::mutex-mtx;
void poll_thread()
{
而(!完成){
轮询_以获取_数据();
如果(接收到数据){
boost::唯一锁定(mtx);
//将数据写入表
}
}
}
无效日志_线程()
{
而(!完成){
睡眠(1);
boost::唯一锁定(mtx);
//将表记录到csv文件。。。
}
}
int main()
{
//创建并启动轮询和日志线程
boost::线程th1(&poll_线程);
boost::线程th2(&log_线程);
//运行菜单
而(!完成){
//...
}
th1.join();
th2.join();
返回0;
}
互斥锁是避免在不同线程中同时访问表所必需的。请发布您尝试过的代码的相关部分,以便人们可以告诉您它有什么问题。它应该与
pthreads
一起使用。只要把代码中你觉得出错的地方贴出来就行了。[Psst!在关闭之前要快一点]创建线程实际上不需要boost。为什么不使用API来创建线程?