我需要通过ARToolKit视频跟踪库实时收集(Boost)tcp服务器信息进行转发。Boost Asio,异步服务器和视频跟踪
这是正确的做法吗?
我实际上做它用升压线程和ASIO,但我认为我做一个坏的方式(即使它的工作原理)
这里做是我做的运行服务器( Server类的来源是加速教程):
boost::asio::io_service io_service;
Server s(io_service, 2345);
boost::thread bt(boost::bind(&boost::asio::io_service::run, &io_service)); //server in background in a second thread
然后我开始视频跟踪
startTracking(); //blocking call in the main thread
以这种方式定义
void startTracking(){
glutInit(&argc, argv); //global and reachable
if ((gArglSettings = arglSetupForCurrentContext()) == NULL) {
fprintf(stderr, "main(): arglSetupForCurrentContext() returned error.\n");
exit(-1);}
... //init a lot of artoolkit parameters
arVideoCapStart();
argMainLoop(NULL, keyEvent, mainLoop);
}
在这种(可怕的)方式中一切正常。但是我想避免为asio服务器产生第二个线程(当我从Boost doc中读取时,它不应该被抛出)。
否则试图把视频traking出主线程崩溃的ARToolKit库即:
boost::thread workerThread(startTracking);
workerThread.join();
当join()
在glutInit调用运行程序内存设计缺陷
没有足够的信息来帮助你在这里...... startTracking()是做什么的?它是线程安全的吗? – Chad 2013-02-09 20:11:29
*一切崩溃*是什么意思?段错误?擦除硬盘驱动器? – 2013-02-09 21:14:18
它在glutInit()调用时发生segfaults,或者尝试将它注释到下一次调用segfault,arglSetupForCurrentContext() 我不知道它是线程安全的 – UnableToLoad 2013-02-10 12:14:04