所以我有一个简单的cpp文件。只有一个具有一个主函数和三个int a-la公共变量。像:
int a;
int b;
int c;
void main()
{
startThredA();
startThredB();
while(1)
{
c = a + b;
printf(c);
}
}
我想创建2个A和B,其中一个应为A生成随机值,为b生成另一个随机值。怎么做这个?
答案 0 :(得分:3)
这是一个简单的小例子。它已经尝试过并且似乎工作正常。
#include <iostream>
#include <boost/thread.hpp>
namespace this_thread = boost::this_thread;
int a = 0;
int b = 0;
int c = 0;
class BaseThread
{
public:
BaseThread()
{ }
virtual ~BaseThread()
{ }
void operator()()
{
try
{
for (;;)
{
// Check if the thread should be interrupted
this_thread::interruption_point();
DoStuff();
}
}
catch (boost::thread_interrupted)
{
// Thread end
}
}
protected:
virtual void DoStuff() = 0;
};
class ThreadA : public BaseThread
{
protected:
virtual void DoStuff()
{
a += 1000;
// Sleep a little while (0.5 second)
this_thread::sleep(boost::posix_time::milliseconds(500));
}
};
class ThreadB : public BaseThread
{
protected:
virtual void DoStuff()
{
b++;
// Sleep a little while (0.5 second)
this_thread::sleep(boost::posix_time::milliseconds(100));
}
};
int main()
{
ThreadA thread_a_instance;
ThreadB thread_b_instance;
boost::thread threadA = boost::thread(thread_a_instance);
boost::thread threadB = boost::thread(thread_b_instance);
// Do this for 10 seconds (0.25 seconds * 40 = 10 seconds)
for (int i = 0; i < 40; i++)
{
c = a + b;
std::cout << c << std::endl;
// Sleep a little while (0.25 second)
this_thread::sleep(boost::posix_time::milliseconds(250));
}
threadB.interrupt();
threadB.join();
threadA.interrupt();
threadA.join();
}
答案 1 :(得分:2)
有一系列文章starting here应该给你一些初步的指示。作者在很大程度上负责将boost.thread引导到C ++ 0x中。
文章列表:
C ++中的多线程0x第1部分:启动线程
C ++中的多线程0x第2部分:使用函数对象和参数启动线程
C ++中的多线程0x第3部分:使用成员函数和引用参数启动线程
C ++中的多线程0x第4部分:保护共享数据
C ++中的多线程0x第5部分:使用std :: unique_lock进行灵活锁定&lt;&gt;
C ++中的多线程0x第6部分:使用原子进行延迟初始化和双重检查锁定
C ++中的多线程0x第7部分:锁定多个没有死锁的互斥锁
C ++中的多线程0x第8部分:期货,承诺和异步函数调用