2013-07-24 10 views
0

此测试代码是OK,这个问题必须在我的方式建立它:计划使用Boost线程绝对没有

#include <boost/thread.hpp> 
#include <iostream> 

void Wait(int seconds) 
{ 
    boost::this_thread::sleep(boost::posix_time::seconds(seconds)); 
} 

void Thread() 
{ 
    for (int i = 0; i < 5; ++i) 
    { 
     Wait(1); 
     std::cout << i << std::endl; 
    } 
} 

int main() 
{ 
    std::cout << "Boost threads test:" << std::endl; 
    boost::thread t(Thread); 
    t.join(); 
} 

这是的CMakeLists.txt文件:

project(BoostThreadsTest) 
cmake_minimum_required(VERSION 2.8) 

find_package(Boost 1.46 REQUIRED COMPONENTS thread) 
set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 

if(Boost_FOUND) 
    include_directories(${Boost_INCLUDE_DIRS}) 
    link_directories(${Boost_LIBRARY_DIRS}) 
    message(STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}") 
else() 
    message(WARNING "Boost headers/libraries not found.") 
endif() 

aux_source_directory(. SRC_LIST) 
add_executable(${PROJECT_NAME} ${SRC_LIST}) 

target_link_libraries(${PROJECT_NAME} 
    ${Boost_LIBRARIES} 
    ${THREADING_LIBRARY} 
    ) 

内置搭配:

cmake -G "MinGW Makefiles" . 
mingw32-make.exe 

一切顺利的话,只有这样的警告:

In file included from C:/boost/include/boost-1_48/boost/thread/win32/thread_data.hpp:12:0, 
       from C:/boost/include/boost-1_48/boost/thread/thread.hpp:15, 
       from C:/boost/include/boost-1_48/boost/thread.hpp:13, 
       from C:\Users\pietro.mele\projects\tests\buildSystem_test\BoostTest\BoostThreadsTest\BoostThreadsTest\main.cpp:4: 
C:/boost/include/boost-1_48/boost/thread/win32/thread_heap_alloc.hpp:59:40: warning: inline function 'void* boost::detail::allocate_raw_heap_memory(unsigned int 
)' declared as dllimport: attribute ignored [-Wattributes] 
C:/boost/include/boost-1_48/boost/thread/win32/thread_heap_alloc.hpp:69:39: warning: inline function 'void boost::detail::free_raw_heap_memory(void*)' declared 
as dllimport: attribute ignored [-Wattributes] 

我得到的可执行文件,但是当我运行它时,它什么也没做。甚至没有打印出“Boost threads test:”字符串,但它并未涉及多线程。没有错误产生。这就像按下[返回]键一样。

谢谢。

+1

我怀疑没有找到DLL。从cygwin执行一个exe文件时,我看到了这种行为:完全没有任何事情发生。但是,当我在Windows资源管理器中双击exe文件时,我看到一个消息框抱怨缺少的DLL:尝试。 – hmjd

+0

@hmjd - 你说得对。如果你把它写成答案,我会接受它。 – Pietro

+0

根据要求添加了答案。 – hmjd

回答

2

(只是粘贴在我的评论中,所以问题可以标记为关闭)。

我怀疑没有找到DLL。从cygwin执行一个exe文件时,我看到了这种行为:完全没有任何事情发生。但是,当我在Windows资源管理器中双击exe文件时,我看到一个消息框抱怨缺少的DLL:尝试。如果这是原因,请调整您的位置以启用DLL。


我不确定的原因,消息框被抑制,如果我发现它(或如果有人将其添加为注释),我会更新这个答案。