manip_threads.cpp

  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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值