manip_threads.cpp

本文介绍了一个使用热键来控制线程状态的Windows应用程序示例。通过注册不同的热键,可以启动、暂停和终止线程。示例中包含了线程创建、热键响应处理及线程状态更改的实现。

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #include <genstub.cpp>

// Hot key values.
#define RESUME_KEY    101
#define SUSPEND_KEY   102
#define TERMINATE_KEY 103

DWORD WINAPI ThreadProc(HWND hWnd)
{
    TCHAR szBuffer[128];
    wsprintf( szBuffer, "Starting Thread ID = %lX", GetCurrentThreadId() );
    SetWindowText( hWnd, szBuffer );
    Sleep( 5000 );
    wsprintf( szBuffer, "Thread %lX finished execution", GetCurrentThreadId() );
    SetWindowText( hWnd, szBuffer );
    ExitThread( TRUE );
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static  HANDLE hChild = 0;

    switch (uMsg)
    {
            case WM_CREATE:
                    RegisterHotKey(hWnd, RESUME_KEY, MOD_ALT, 'R');
                    RegisterHotKey(hWnd, SUSPEND_KEY, MOD_ALT, 'S');
                    RegisterHotKey(hWnd, TERMINATE_KEY, MOD_ALT, 'K');
                    return DefWindowProc( hWnd, uMsg, wParam, lParam );
            case WM_DESTROY:
                    UnregisterHotKey(hWnd, RESUME_KEY);
                    UnregisterHotKey(hWnd, SUSPEND_KEY);
                    UnregisterHotKey(hWnd, TERMINATE_KEY);
                    PostQuitMessage( 0 );
                    break;
            case WM_HOTKEY:
                    {
                       TCHAR szBuffer[128];
                       DWORD dwExitCodeThread = STILL_ACTIVE;
                       lstrcpy( szBuffer, "No Child Thread Running" );
                       if (hChild)
                          GetExitCodeThread(hChild, &dwExitCodeThread);
                       if (dwExitCodeThread==STILL_ACTIVE)
                          switch (wParam)
                          {
                             case SUSPEND_KEY:
                                 wsprintf( szBuffer, "Suspending thread %lX", hChild );
                                 SuspendThread(hChild);
                                 break;
                             case RESUME_KEY:
                                 wsprintf( szBuffer, "Resuming thread %lX", hChild );
                                 ResumeThread(hChild);
                                 break;
                             case TERMINATE_KEY:
                                 wsprintf( szBuffer, "Terminating thread %lX", hChild );
                                 TerminateThread(hChild, FALSE);
                                 break;
                          }
                       SetWindowText( hWnd, szBuffer );
                    }
                    break;
            case WM_COMMAND:  // Process menu items.
                    switch ( LOWORD( wParam )  )
                    {
                        case IDM_TEST:
                           {  // Start a thread. Only one thread at at time.
                              DWORD dwExitCodeThread;
                              DWORD dwChild;
                              if (hChild)
                                 GetExitCodeThread( hChild, &dwExitCodeThread );
                              if (dwExitCodeThread!=STILL_ACTIVE)
                                 hChild = CreateThread(NULL, 0, ThreadProc, hWnd, 0, &dwChild );
                           }
                           break;
                        case IDM_EXIT:
                              DestroyWindow( hWnd );
                              break;
                    }
            break;
            default:
                 return DefWindowProc( hWnd, uMsg, wParam, lParam );
    }
    return NULL;
}

cmake_minimum_required(VERSION 3.22) #set(CMAKE_BUILD_TYPE Debug) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(target_arch aarch64-linux-gnu) set(CMAKE_CUDA_ARCHITECTURES ${target_arch} CACHE STRING "" FORCE) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH "/usr/${target_arch}") find_program(CMAKE_C_COMPILER ${target_arch}-gcc) find_program(CMAKE_CXX_COMPILER ${target_arch}-g++) if(NOT CMAKE_C_COMPILER OR NOT CMAKE_CXX_COMPILER) message(FATAL_ERROR "Can't find suitable C/C++ cross compiler for ${target_arch}") endif() set(CMAKE_AR ${target_arch}-ar CACHE FILEPATH "" FORCE) set(CMAKE_RANLIB ${target_arch}-ranlib) set(CMAKE_LINKER ${target_arch}-ld) set(CMAKE_EXE_LINKER_FLAGS_INIT -Wl,--allow-shlib-undefined) find_package(CUDAToolkit REQUIRED) find_package(Threads REQUIRED) # instruct nvcc to use our cross-compiler set(CMAKE_CUDA_FLAGS "-ccbin ${CMAKE_CXX_COMPILER} -Xcompiler -fPIC" CACHE STRING "" FORCE) project(radar_processor LANGUAGES CXX CUDA) include_directories(radar_processor ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/include ${CUDAToolkit_INCLUDE_DIRS} ) # 可执行文件 add_executable(radar_processor src/main.cpp src/core0_pcie_init.cpp src/core1_data_acquisition.cpp src/core2_data_transpose.cpp src/core3_data_rearrange.cpp src/core4_data_collection.cpp src/reg_read_write.cpp src/pcie_dma.cpp src/SysInit.cpp Net_Cfg/Net_Cfg.cpp Target_Simu/Target_simu.cpp PC_Commun/Send2PC.cpp src/founction.cpp ) target_include_directories(radar_processor PRIVATE include) target_link_libraries(radar_processor PRIVATE Threads::Threads) target_link_libraries(radar_processor PUBLIC CUDA::cudart) # # GPU部分支持 # find_package(CUDA) # if(CUDA_FOUND) # # 启用GPU处理 # message(STATUS "CUDA Toolkit found - enabling GPU features") # cuda_add_executable(gpu_processor # src/core5_gpu_processing.cu # src/core4_data_collection.cpp) # else() # message(WARNING "CUDA not found - GPU processing disabled") # endif() # 单元测试 option(ENABLE_TESTS "Enable unit tests" OFF) if(ENABLE_TESTS) add_subdirectory(test) endif()
最新发布
09-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值