コード例 #1
0
ファイル: client.cpp プロジェクト: jbluepolarbear/Misc
void Client::SendPackets()
{
  msguse.Synchronize();
  FillBuckets( messages );
  messages.clear();
  msguse.Release();

  bool notdone = true;
  unsigned num = GetMaxPackSend();

  while ( notdone && --num )
  {
    unsigned char Buffer[MaxPacketSize];
    unsigned offset = sizeof( UDPHeader );
    while ( notdone = GetNextMessage( *reinterpret_cast<MessagePacket *>( Buffer + offset ) ) &&
            ( offset += sizeof( MessagePacket ) ) < MaxPacketSize );

    unsigned Size = offset - sizeof( UDPHeader );
    UDPHeader Header = { CW, GetId(), seqnum, lastseqnum, Size, MissedPackets };

    packetsent.push_back( Tick( seqnum++, Clock() ) );

    memcpy( Buffer, &Header, sizeof Header );

    currentdatasent += offset;
    int n = sendto( sock, ( char * )Buffer, offset, 0, ( sockaddr * )&serversin, sizeof( sockaddr_in ) );
    Check( n );
  }
}
コード例 #2
0
ファイル: hailstone.cpp プロジェクト: vilya/Hailstones
int main(int argc, char** argv)
{
  if (argc != 5) {
    fprintf(stderr, "Usage: %s <lower> <upper> <max-length> <bucket-size>\n", argv[0]);
    return -1;
  }

  size_t lower = atoll(argv[1]);
  size_t upper = atoll(argv[2]);
  size_t maxLength = atoll(argv[3]);
  size_t bucketSize = atoll(argv[4]);

  // Start timing.
  tbb::tick_count startTime = tbb::tick_count::now();
  
  // Fill in the lookup table for sequence lengths of numbers up to kNumStoredSequences.
  gSequenceLength[0] = 0;
  HailstoneFiller filler(maxLength);
  tbb::parallel_for(tbb::blocked_range<size_t>(1, kNumStoredSequences), filler);

  // Calculate the sequence lengths for the input range, using the lookup tables
  // where possible.
  HailstoneGathererFull gatherFull(maxLength, lower, upper);
  tbb::parallel_reduce(tbb::blocked_range<size_t>(lower, upper + 1), gatherFull);

  // Combine the length counts into their buckets.
  size_t numBuckets = maxLength / bucketSize;
  if (maxLength % bucketSize != 0)
    ++numBuckets;
  size_t buckets[kMaxPossibleLength];
  size_t overflow;
  FillBuckets(gatherFull._buckets, maxLength, bucketSize, numBuckets, buckets, overflow);

  // Stop timing.
  tbb::tick_count endTime = tbb::tick_count::now();

  // Print the results.
  PrintResults(startTime, endTime,
      lower, upper, maxLength, bucketSize, numBuckets, buckets, overflow);

  return 0;
}