⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swmrgtest.dpr

📁 < windos核心编程>>是经典中的经典,书中原代码是用delphi重新编写的.
💻 DPR
字号:
program SWMRGTest;

{$R 'SWMRG.res' 'SWMRG.rc'}

uses Windows, Messages, SWMRG in 'SWMRG.pas';

  // 资源保护对象
var g_swmrg: TSWMRG;

  // 线程回调函数
function Thread(pvParam: Pointer): Integer;
var
  sz: array[0..50] of Char;
  n: Integer;
begin
  // 选择读/写
  wvsprintf(sz, 'SWMRG Test: Thread %d', @pvParam);
  n := MessageBox(0, 'YES: Attempt to read'#13#10'NO: Attempt to write', sz, MB_YESNO);

  // 尝试读/写
  if (n = IDYES) then
  begin
    g_swmrg.WaitToRead();
    MessageBox(0, 'OK stops READING', sz, MB_OK);
  end else
  begin
    g_swmrg.WaitToWrite();
    MessageBox(0, 'OK stops WRITING', sz, MB_OK);
  end;

  // 停止读/写
  g_swmrg.Done();

  Result := 0;
end;

  // 程序入口
var
  hThreads: array[1..MAXIMUM_WAIT_OBJECTS] of THandle;
  nThreads: Integer;
  dwThreadId: DWORD;
begin
  // 建立保护对象
  g_swmrg := TSWMRG.Create();

  // 建立一组线程
  for nThreads := 1 to 8 do
    hThreads[nThreads] := BeginThread(nil, 0, @Thread, Pointer(nThreads), 0, dwThreadId);

  // 等待线程结束
  nThreads := 8;
  WaitForMultipleObjects(nThreads, @hThreads[1], TRUE, INFINITE);

  // 关闭线程句柄
  while (nThreads > 0) do
  begin
    CloseHandle(hThreads[nThreads]);
    Dec(nThreads);
  end;

  // 释放保护对象
  g_swmrg.Free();
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -